对一个文件读写
有时候在爬虫中对最后数据的处理可能是将其存入某个文件内,那么此时就可以使用 with 语句对某个文件进行操作。
写入一个文件
1 | with open(filename1, 'w') as fp: |
读取一个文件
1 | with open(filename1, 'r') as fp: |
对多个文件进行读写
将 A 文件内容写入 B 文件
1 | with open(A,'r') as fp1 , open(B,'a') as fp2: |
同时读取 A B C 三个文件
同时打开三个文件,文件行数一样,要求实现每个文件依次读取一行,然后输出,我们先来看比较容易想到的写法:
1 | with open(A, 'rb') as fp1: |
注意这里只能对单个文件进行for循环读取,不能写成:1
2for i, j, k in fp1, fp2, fp3:
print(i, j, k)
但可使用强大的zip操作:1
2for i, j, k in zip(fp1, fp2, fp3):
print(i, j, k)
这样层层的嵌套未免啰嗦,with结构支持一种更简洁的写法:1
2
3
4
5with open(A, 'rb') as fp1, open(B, 'rb') as fp2, open(C, 'rb') as fp3:
for i in fp1:
j = fp2.readline()
k = fp3.readline()
print(i, j, k)
或者使用更为优雅的写法,此时需要 contextlib 语法糖:1
2
3
4
5from contextlib improt ExitStack
with ExitStack() as stack:
files = [stack.enter_context(open(fname)) for fname in [A, B, C]]
for i, j, k in zip(files[0], files[1], files[2]):
print(i, j, k)