本篇章主要讲述文件的读写函数,读写方式,比如如何一次性读取整个文件,一行一行的读取文件,以及如何将文本附加到文件末尾,异常的常见情况,如何处理异常,以及如何利用json存储数据。
文件
读取整个文件
filename = 'pi_digits.txt'
with open(filename) as file_object:
contents = file_object.read()
print(contents)
逐行读取
filename = 'pi_digits.txt'
with open(filename) as file_object:
for line in file_object:
print(line.strip())
创建一个包含文件各行内容的列表
filename = 'pi_digits.txt'
with open(filename) as file_object:
contents = file_object.readlines()
for line in lines:
print(line.strip())
写入文件
读写模式有:读取文件模式r,写入文件模式w,附加模式a,或者能够读取和写入文件的模式r+,如果省略了模式参数,python默认是只读模式打开文件。
注意:w模式打开文件要小心,因为如果指定的文件已经存在,python将在返回文件对象前清空该文件。
filename = 'programming.txt'
with open(filename, 'w') as file_object:
file_object.write("I love programming")
写入文件
filename = 'programming.txt'
with open(filename, 'w') as file_object:
file_object.write("I love programming\n")
file_object.write("I love creating new games\n")
附加到文件
filename = 'programming.txt'
with open(filename, 'w') as file_object:
file_object.write("I also love programming\n")
file_object.write("haha, I love creating new games\n")
异常
Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知 所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行; 如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。
使用try-except代码块
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")
else模块
通过将可能引发错误的代码放在try-except代码块中,可提高这个程序抵御错误的能力。错 误是执行除法运算的代码行导致的,因此我们需要将它放到try-except代码块中。这个示例还包 含一个else代码块;依赖于try代码块成功执行的代码都应放到else代码块中。
answer = 5/2
try:
print(answer)
except ZeroDivisionError:
print("You can't divide by zero!")
else:
print(answer)
备注:还有类似FileNotFoundError文件找不到错误,以及在except模块中一声不吭,也就是说pass替代执行的语句。
json.dump()和json.load()
来编写一个存储一组数字的简短程序,再编写一个将这些数字读取到内存中的程序。第 一个程序将使用json.dump()来存储这组数字,而第二个程序将使用json.load()。
函数json.dump()接受两个实参:要存储的数据以及可用于存储数据的文件对象。
import json
numbers = [2, 3, 5, 7, 11, 13]
filename = 'numbers.json'
with open(filename, 'w') as f_obj:
json.dump(numbers, f_obj)
使用json.load()将这个列表读取到内存中.
import json
numbers = [2, 3, 5, 7, 11, 13]
filename = 'numbers.json'
with open(filename as f_obj:
numbers = json.load(f_obj)
print(numbers)
合并json.dump()和json.load()两个函数
filename = 'username.json'
try:
with open(filname) as f_obj:
username = json.load(f_obj)
except FileNotFoundError:
username = input('what is your name?')
with open(filename, 'w') as f_obj:
json.dump(username, f_obj)
print("We'll remember you when you come back, " + username + "!")
else:
print("Welcome back, " + username + "!")