《Python编程:从入门到实践》笔记。
本章主要是学习Python的文件操作,主要是从文件中读取数据以及将数据存储到文件中,还有错误处理,异常类,json模块等。
1. 从文件中读数据
1.1 读取整个文件
以下文件
pi_digits.txt
包含了精确到小数点后30位的圆周率数据
# pi_digits.txt文件
3.1415926535
8979323846
2643383279
# 代码:
with open("pi_digits.txt", "r") as file_object:
contents = file_object.read() # 一次性读取整个文件
print(contents)
# 结果:和上述文件内容一样
从上述代码可以看出,我们打开文件使用
open()
函数,该函数至少接收一个参数,即文件路径。读取文件时需要向
open()
函数指明是用什么方式读取文件,是只读(
"r"
),只写(
"w"
),末尾添加(
"a"
)还是读写均可(
"r+"
),
open()
函数默认以“只读”方式读取文件。这只是4中常用的文件读取方式,此外还有至少8种读写方式。
open()
函数返回一个文件对象,
file_object
用于接收该对象。通过文件对象的
read()
方法读取文件内容,且该方法返回整个文件的内容。
上述代码中的文件和源代码在同一目录中。注意文件路径的问题,绝对路径(不提倡)和相对路径(相对于源文件的路径)以及Windows和Linux下路径的写法。
注意代码中的
with
关键字。其实读写文件不需要该关键字,打开文件使用
open()
函数,文件读取完后关闭文件使用
close()
函数,读取内容可以调用
read()
方法。而之所以使用
with
关键字,主要是因为①你最后忘记关闭文件,就想忘了关灯一样;②也可能是在关闭前程序出错,导致
close()
语句未执行。这些让文件没有关闭的情况都有可能导致数据丢失或损坏。
with
关键字则被用来应对这些情况,它保证在结束
with
块时,文件一定会被关闭。
1.2 逐行读取
上述代码一次性读取整个文件,这在文件较小或者内存充裕的时候没有问题,但如果文件特别大,内存容量又很羞涩,则只能逐行读取:
# 代码:
file_name = "pi_digits.txt"
with open(file_name) as file_pi:
for line in file_pi: # 也可以通过while循环配合readline()方法逐行读取文件
print(line)
# 结果:
3.1415926535
8979323846
2643383279
这里需要注意一个问题,就是对行以及文件末尾空字符的读取问题,
read()
和
readline()
方法会读取末尾的空字符(这里是换行符)。我们可以通过之前讲的
rstrip()
方法去掉末尾的空字符。
1.3 将文件每一行放入列表中
readlines()
方法将文件中每一行存入列表并返回,以下代码进一步处理文件中的内容:
# 代码:
file_name = "pi_digits.txt"
with open(file_name) as file_pi:
lines = file_pi.readlines()
pi_string = ""
for line in lines:
pi_string += line.strip()
print(pi_string)
print(len(pi_string))
# 结果:
3.141592653589793238462643383279
32
注意,Python从文件中读取出的所有内容都是字符串,如果你想要的是数字,请记得转换。
2. 写入文件
以下是一个简单的文件写入程序:
filename = "python.txt"