文件和异常
从文件中读取数据
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents)
函数open()要以任何方式使用文件,都要先打开文件,这样才能访问他。函数open()接受一个参数:要打开的文件名称,python在当前执行的文件所在目录中查找指定文件。
关键字with在不需要访问文件后将其关闭。
方法read()读取文件的全部内容,并将其作为字符串存储在变量contents中
read()在到达文件末尾时返回一个空字符串,而空字符串显示出来的时候就是一个空行。
要让python打开不与程序文件位于同一个目录中的文件,需要提供文件路径,他让python到系统的特定位置去查找。
要逐行读取可以对文件对象使用for循环
filename = 'pi_digits.txt'
with open(filename) as file_object:
for line in file_object:
print(line)
使用关键字with时,open()返回的文件对象只在with()代码块内可用。如果要在with()代码块外访问文件的内容,可在with代码快内将文件的各行储存在列表中。
读取文本文件时,python将其中的所有文本都解读为字符串。
写入文件
要写入文件,你在调用open()时需要系统另一个实参,告诉python你要写入文件。
可以指定读取模式('r'),写入模式('w'),附加模式('a')或能让你能够读取和写入文件的模式('r+'),若省略了模式实参,python将默认的只读模式打开文件。
以写入('w')模式打开文件时要千万小心,如果指定的文件已经存在,python将在返回文件对象前清空该文件。
python只能将字符串写入文本文件,要将数值数据存储到文本文件中,必须先使用函数str()将其转换为字符串格式。
函数write()不会在写入的文本末尾添加换行符。
如果你要给文件添加内容,而不是覆盖原有的内容,可以附加模式代开文件。
异常
每当发生让python不知所措的错误时,他都会创建一个异常对象,如果你编写了处理该异常的代码,程序将继续运行,吐过未处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。异常是使用try-except处理的
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zerol")
try-except还包含一个else代码块,如果未发生错误将执行else内的代码
存储数据
模块json让你能够将简单的python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。你还可以用json在python程序之间分享数据。更重要的是,json数据格式并非python专用的,这让你能够以json格式存储的数据与使用其他编程语言的人分享。
函数json.dump()接受两个实参:要存储的数据以及可用于存储数据的文件对象。
import json
numbers = [2,3,4,5,7,11,13]
filename = 'numbers.json'
with open(filename,'w') as f_obj:
json.dump(numbers,f_obj)
使用json.load()讲列表读取到内存中
import json
filename = 'numbers.json'
with open(filename) as f_obj:
numbers = json.load(f_obj)
print(numbers)
重构
代码能够正确的运行,但可以进一步的改进---讲代码划分为一系列完成具体工作的函数。