python-文件和异常-待继续

从文件中读取数据

文本文件可存储的数据量多得难以置信:天气数据、交通数据、社会经济数据、文学作品等。 每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其 如此。例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式 并将其写入文件,让浏览器能够显示这些内容。
要使用文本文件中的信息,首先需要将信息读取到内存中。为此,你可以一次性读取文件的 全部内容,也可以以每次一行的方式逐步读取。

读取整个文件

需要注意文件的路径,返回对象file_object

with open('file/a.txt') as file_object: 
    contents = file_object.read() 
    print(contents)

要删 除多出来的空行,可在print语句中使用rstrip()

文件路径

在 Windows系统中,在文件路径中使用反斜杠()而不是斜杠(/)

with open('text_files\filename.txt') as file_object:

指定计算机内绝对路径 macos:

file_path = '/Users/yushui/Downloads/a.txt'
with open(file_path) as file_object:
    a =file_object.read()
    print(a)

windows:

file_path = 'C:\Users\ehmatthes\other_files\text_files\filename.txt'

逐行读取

要以每次一行的方式检查文件,可对文件对象使用for循环:

file_path = '/Users/yushui/Downloads/a.txt'
with open(file_path) as file_object:
    for line in file_object:
        print(line)

#
3.1415926535

8979323846

2643383279

为何会出现这些空白行呢?因为在这个文件中,每行的末尾都有一个看不见的换行符,而 print语句也会加上一个换行符,因此每行末尾都有两个换行符:一个来自文件,另一个来自print 语句。要消除这些多余的空白行,可在print语句中使用rstrip()

创建一个包含文件各行内容的列表

file_path = '/Users/yushui/Downloads/a.txt'
with open(file_path) as file_object:
    lines = file_object.readlines()

for line in lines:
    print(line.rstrip())

readlines()从文件中读取每一行,并将其存储在一个列表中;接下来,该列表被 存储到变量lines中;在with代码块外,我们依然可以使用这个变量。在处,我们使用一个简单 的for循环来打印lines中的各行。由于列表lines的每个元素都对应于文件中的一行,因此输出 与文件内容完全一致。

使用文件的内容

下面以简单的方式使用圆周率
的值。首先,我们将创建一个字符串,它包含文件中存储的所有数字,且没有任何空格

file_path = '/Users/yushui/Downloads/a.txt'
with open(file_path) as file_object:
    lines = file_object.readlines()

a = ''
for line in lines:
    a += line.rstrip()

print(a)
print(len(a))

包含一百万位的大型文件

只需要xx位数字
print(a[:xx]) 即可

圆周率里是否包含你的生日

file_path = '/Users/yushui/Downloads/a.txt'
with open(file_path) as file_object:
    lines = file_object.readlines()

yzl = ''
for line in lines:
    yzl += line.rstrip()

shengri = input("shu ru ni de shengri :")
if shengri in yzl:
    print("gong xi ni ")
else:
    print("sorry") 

练习:可使用方法 replace()将字符串中的特定单词都替换为另一 个单词。下面是一个简单的示例,演示了如何将句子中的'dog'替换为'cat'

file_path = '/Users/yushui/Downloads/learning_python.txt'

with open(file_path) as file_object:
        a = file_object.readlines()
        for aa in a :
            print(aa.rstrip().replace('Python','c'))

#
In c you can a
In c you can b
In c you can c

写入文件 写入空文件

要将文本写入文件,你在调用open()时需要提供另一个实参,告诉Python你要写入打开的文 件。为明白其中的工作原理,我们来将一条简单的消息存储到文件中,而不是将其打印到屏幕上

file_path = '/Users/yushui/Downloads/learning_python.txt'


with open(file_path,'w') as file_object:
        file_object.write("I love programming")

在这个示例中,调用open()时提供了两个实参(见Ø)。第一个实参也是要打开的文件的名称; 第二个实参('w')告诉Python,我们要以写入模式打开这个文件。打开文件时,可指定读取模 式('r')、写入模式('w')、附加模式('a')或让你能够读取和写入文件的模式('r+')。如果 你省略了模式实参,Python将以默认的只读模式打开文件

异常

Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知 所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行; 如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。
异常是使用try-except代码块处理的。try-except代码块让Python执行指定的操作,同时告 诉Python发生异常时怎么办。使用了try-except代码块时,即便出现异常,程序也将继续运行: 显示你编写的友好的错误消息,而不是令用户迷惑的traceback

使用try-except代码块

当你认为可能发生了错误时,可编写一个try-except代码块来处理可能引发的异常。你让 Python尝试运行一些代码,并告诉它如果这些代码引发了指定的异常,该怎么办。
处理ZeroDivisionError异常的try-except代码块类似于下面这样

try:       
  print(5/0) 
 except ZeroDivisionError:     
  print("You can't divide by zero!") 

try-except-else

print("shu ru 2 ge zi fu")
print("shu ru 'q' tui chu")

while True:
    a = input("shu ru di yi ge shu zi:")
    if a == 'q':
        break

    b = input("shu ru di er ge shu zi:")
    if b == 'q':
        break
    try:
        c = int(a)/int(b)
    except ZeroDivisionError:
        print("You can't divide by 0!")
    else:
        print(c)

处理FileNotFoundError异常

file_name = 'a.txt'
try:
    with open(file_name) as filea:
        b = filea.read()
        print(b)
except FileNotFoundError:
    print("can't find")

分析文本

file_name = 'TEST4/a.txt'
try:
    with open(file_name) as filea:
        b = filea.read()
        print(b)
except FileNotFoundError:
    print("can't find")

else:
    w =b.split()
    n_w =len(w)
    print(n_w)

使用多个文件

单元测试和测试用例

Python标准库中的模块unittest提供了代码测试工具。单元测试用于核实函数的某个方面没 有问题;测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求。 良好的测试用例考虑到了函数可能收到的各种输入,包含针对所有这些情形的测试。全覆盖式测 试用例包含一整套单元测试,涵盖了各种可能的函数使用方式。对于大型项目,要实现全覆盖可 能很难。通常,最初只要针对代码的重要行为编写测试即可,等项目被广泛使用时再考虑全覆盖

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343