文章目录
目录
前言
在本章中,我们将学习处理文件,让程序能够快速地分析大量数据;你将学习错误处理,比年报程序在面对意外情形中崩溃;你将学习异常,用于管理程序运行时出现的错误。
1 从文件中读取数据
1.1 读取整个文件
要读取文件,需要一个包含几行文本的文件,如下
pi_digits.txt
3.1415926535
8979323846
2643383279
它包含精确到小数点后30位的圆周率,且在小数点后每10位处都换行,然后将本文件保存在本章程序所在目录中
#打开文件并且读取
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents.rstrip())
Python在当前执行的文件所在目录中查找指定的文件,函数open()返回一个表示文件的对象
我们能用open()和close()来打开和关闭文件,但是这样做,如果程序存在bug,导致close()语句未执行,文件将不会关闭,从而导致数据丢失。有了pi_digits.txt的文件对象后,我们使用方法read()读取这个文件的全部内容,并将其作为一个长长的字符串存储在变量contents中,这样,通过打印contents的值,就可将这个文本文件的全部内容显示出来。当然在使用open()函数的时候,要注意文件的路径,在上述程序中因为文件和程序在同一路径下所以使用的是相对路径,也可以使用绝对路径。
1.2逐行读取
#逐行读取
filename = 'pi_digits.txt'
with open(filename) as file_object:
for line in file_object:
print(line.rstrip())
1.3创建一个文件各行的列表
#创建一个包含文件各行内容的列表
filename = 'pi_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()
for line in lines:
print(line.rstrip())
注意:读取文件时,python见其中的所有文本都解读为字符串,如果你读取的是数字,并要将其作为数值使用,就必须使用函数int()将其转换成整数,或使用函数float()将其转换成浮点数
2 写入文件
2.1 写入空文件
#写入空文件
filename = 'pi_digits.txt'
with open(filename,'w') as file_object:
file_object.write("I LOVE PROGRAMMING.")
在使用open()函数时间你需要提供两个实参,第一个实参也是要打开的文件的名称:第二个实参(’w‘),我们要以写入模式打开这个文件,打开文件时,可指定读取模式(’r‘),写入模式(’w‘),附加模式(’a‘)或让你能偶读取和写入文件的模式(’r+‘)如果你省略了模式实参,python将以默认的只读模式打开文件,注意,Python只能将字符串写入文本文件,要将数值数据存储到文本文件中,必须先使用函数str()将其转换成字符串格式。
2.2 写入多行
filename = 'pi_digits.txt'
with open(filename,'w') as file_object:
file_object.write("I LOVE PROGRAMMING.\n")
file_object.write("I LOVE CREATING NEW GAMES")
2.3 附加到文件
如果你要给文件添加内容,而不是覆盖原有的文件,可以使用附加模式打开文件。
filename = 'pi_digits.txt'#添加文件不覆盖其他的内容
with open(filename,'a') as file_object:
file_object.write("I also love finding meaning i large datasets\n")
file_object.write("I love creating apps that can run in a browser\n")
最终的结果就是,文件原来的内容还在,他们后面时我么刚添加的内容
3.异常
异常是使用try-except代码块处理。try-except代码块让python执行 指定的操作,同时告诉python发生异常时该怎么办
3.1 处理ZeroDivisionError异常
try:
print(5/0)
except ZeroDivisionError:
print("You can not divide by zero")
这样用户看到的就是一条友好的消息而不是traceback
3.2 使用异常避免崩溃
#异常:可以用try-except代码块处理的,try-except代码块让python执行指定的操作
print("give me two numbers,and i will divide them.")
print("Enter 'q' to quit")
while True:
first_number = input("\nFirst number: ")
if first_number == 'q':
break
second_number = input("Second number:")
if second_number == 'q':
break
try:
answer = int(first_number)/int(second_number)
except ZeroDivisionError:
print("can not")
print(answer)
决定报告那些错误,知道在什么情况下向用户报告错误,在什么情况下有应该在失败的时候一声不吭,如果用户知道要分析那些文件,他们可能希望在有文件没有分析时,将其中的原因告诉他们。Python的错误处理结构让你能够细致地控制与用户分线错误信息的程度,要分享多少信息由你决定。
3.3重构
你经常会遇到这样的情况:代码能够正常运行,但可做进一步的改进-将代码划分为一系列完成具体工作的函数。这样的过程称为重构。重构让代码更清晰,更容易扩展。
总结
你学习了:如何使用文件;如何一次性读取整个文件,以及如何以每次一行的方式读取文件的内容;如何写入文件,以及如何将文本附加到文件末尾;什么是异常以及如何处理程序可能引发的异常;如何存储python数据结构,以保存用户提供的信息,避免用户每次运行程序时都需要重新提供