我有两个文件:
test1.txt的内容:
test_outside_1
test_outside_2
test_outside_3
test2.txt的内容:
test_inside_1
test_inside_2
test_inside_3
这是我的Python代码:
fobj1 = open('test1.txt', 'r')
fobj2 = open('test2.txt', 'r')
for aline in fobj1.readlines():
print aline
for bline in fobj2.readlines():
print bline
我预期的输出是:
test_outside_1
test_inside_1
test_inside_2
test_inside_3
test_outside_2
test_inside_1
test_inside_2
test_inside_3
test_outside_3
test_inside_1
test_inside_2
test_inside_3
但是当我运行我的Python代码时,输出是:
test_outside_1
test_inside_1
test_inside_2
test_inside_3
test_outside_2
test_outside_3
有人可以告诉我如何解决它吗?
答案 0 :(得分:2)
执行file.readlines()
时,您读取完整文件,光标位于文件末尾,尝试再次调用file.readlines()
将返回一个空列表,因为没有更多要从文件中读取的行。
您可以做的一件事就是将每个存储在列表中并迭代列表。示例 -
with open('test1.txt', 'r') as fobj1 , open('test2.txt', 'r') as fobj2:
alist = fobj1.readlines()
blist = fobj1.readlines()
for aline in alist:
print aline
for bline in blist:
print bline
虽然请注意,如果文件很大,将完整的文件读入内存可能不是一个好主意。根据您的最终目标,可能会有更好的方法。
答案 1 :(得分:1)
它发生了,因为在test1.txt的第一次迭代中,test2.txt被读取,然后没有其他存在读取test2.txt
您也可以这样做:
fobj1 = list(open('test1.txt', 'r'))
fobj2 = list(open('test2.txt', 'r'))
for aline in fobj1:
print aline
for bline in fobj2:
print bline
答案 2 :(得分:1)
在第一个循环中回答@Anand S Kumar你在一个循环中读取完成文件,它返回并清空列表。
如果您不想存储所有文件(因为这可能是一个坏主意),您将不得不再次打开您的文件。
with open('test1.txt', 'r') as fobj1:
for aline in fobj1.readlines():
print aline
with open('test2.txt', 'r') as fobj2:
for bline in fobj2.readlines():
print bline
但你会打开很多时间。
编辑:#Anand的评论是正确的。如果你想保持低内存,你应该做类似的事情
aline="."
with open('test1.txt', 'r') as fobj1:
while aline != "":
aline = fobj1.readline()
print aline
bline="."
with open('test2.txt', 'r') as fobj2:
while bline != "":
bline = fobj2.readline()
print bline