目录
一、从文件中读取数据
1.1、读取整个文件
1.2、逐行读取
1.3、读取为列表
二、写入文件
2.1、写入空文件
2.2、写入多行
2.3、附加到文件
三、使用json模块存储数据
3.1、使用json.dump()存储数据
3.2、使用json.load()读取数据
一、从文件中读取数据
1.1、读取整个文件
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents)
with在不再需要访问文件后将其关闭。
open()接受一个参数:要打开文件的文件路径(可以是绝对路径或者相对路径),并返回一个表示该文件的对象。
read()方法读取文件的全部内容,并将其作为一个长长的字符串存储在变量contents中。
1.2、逐行读取
要以每次一行的方式检查文件,可对文件对象使用for循环:
filename = 'pi_digits.txt'
with open(filename) as file_object:
for line in file_object:
print(line)
打印每一行时,发现空白行更多了:
print语句也会加上一个换行符。
1.3、读取为列表
readlines()方法从文件中读取每一行,并将其存储在一个列表中:
filename = 'pi_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()
for line in lines:
print(line.rstrip())
二、写入文件
2.1、写入空文件
open()函数传入另外一个参数,即打开文件的模式:
- 'r' —— 读取模式
- 'w' —— 写入模式
- 'r+' —— 读取和写入文件的模式
- 'a' —— 附加模式
filename = 'programming.txt'
with open(filename, 'w') as file_object:
file_object.write("I love programming.")
programming.txt文件写入一行字符串。
2.2、写入多行
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")
2.3、附加到文件
如果要给文件添加内容,而不是覆盖原有的内容,可以使用附加模式打开文件:
filename = 'programming.txt'
with open(filename, 'a') as file_object:
file_object.write("I also love finding meaning in large datasets.\n")
file_object.write("I love creating apps that can run in a broser.\n")
三、使用json模块存储数据
json能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件。
json在Python程序之间分享数据,更重要的是,JSON数据格式并非Python专用的,这使得JSON格式存储的数据可以分享给使用其他编程语言的人。
3.1、使用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)
3.2、使用json.load()读取数据
import json
filename = 'numbers.json'
with open(filename) as f_obj:
numbers = json.load(f_obj)
print(numbers)
四、异常
异常的特殊对象来管理程序执行期间发生的错误。
每当发生让Python不知所措的错误时,它都会创建一个异常对象。
traceback,其中包含有关异常的报告。
异常是使用try-except代码块处理的,使用了try-except代码块时,即便出现异常,程序也将继续运行:显示我们自己编写的友好的错误消息,而不是令用户迷惑的traceback。
4.1、处理ZeroDivisionError异常
try:
print(5 / 0)
except ZeroDivisionError:
print("You can't divide by zero!")
try代码块中的代码运行起来没有问题,Python将跳过except代码块。
try代码块中的代码导致了错误,Python将查找这样的except代码块,并运行其中的代码。
4.2、else代码块
try-except-else代码块中,如果try代码块成功执行,则接下来将运行else代码块中的代码。
print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")
while True:
first_number = input("\nFirst number: ")
if first_number == 'q':
break
second_number = input("Second number: ")
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print("You can't divide by 0!")
else:
print(answer)
4.3、处理FileNotFoundError异常
filename = 'alice.txt'
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
msg = "Sorry, the file " + filename + " does not exists."
print(msg)
4.4、pass语句
Python有一个pass语句,可在代码块中使用它来让Python什么都不要做:
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
pass