python中fopen的问题

最近在写一个小脚本的时候遇到的一个小问题,难倒了多个高级安全工程师,就记录下来了。

我在做文件读取循环的时候,比较喜欢这么写:

1
2
3
f_open = fopen('1.txt','r')
for i in f_open:
print()

然后呢,正好有两个文件要进行匹配,那么不就是二次循环嘛

1
2
3
4
5
6
f_open1 = fopen('1.txt','r')
f_open2 = fopen('2.txt','r')
for i in f_open1:
for d in f_open2:
if d in i:
print()

然后就发现了,每次只循环2.txt中的list一遍,也就是说,第一个for没起作用。

最后发现,fopen打开的是一个文件流,循环一遍以后,不会再回到开头,所以只会循环一遍。

1
2
3
4
5
6
f_open1 = fopen('1.txt','r')
for i in f_open1:
f_open2 = fopen('2.txt','r')
for d in f_open2:
if d in i:
print()

这么写就不会有问题了,或者

1
fopen().read()