我想迭代两个不同的迭代器,就像这样:
file1 = open('file1', 'r')
file2 = open('file2', 'r')
for item in one_then_another(file1, file2):
print item
我希望它打印file1的所有行,然后打印file2的所有行。
我想要一些通用的东西,因为迭代器可能不是文件,这只是一个例子。我知道我可以做到这一点:
for item in [file1]+[file2]:
但这会将两个文件都读入内存,这是我希望避免的。
发布于 2014-02-17 18:05:56
from itertools import chain
for line in chain(file1, file2):
pass
fileinput
模块也提供了类似的功能:
import fileinput
for line in fileinput.input(['file1', 'file2']):
pass
发布于 2014-02-18 03:01:45
我认为解决这个特定文件问题的最具Pythonic风格的方法是使用fileinput
模块(因为您要么需要复杂的上下文管理器,要么需要使用open
处理错误),我将从Ashwini的示例开始,但添加一些东西。首先,最好使用通用换行支持的U
标志打开(假设您的Python语言是用它编译的,大多数都是用它编译的),(r
是默认模式,但显式比隐式好)。如果你和其他人一起工作,最好支持他们为你提供任何格式的文件。
import fileinput
for line in fileinput.input(['file1', 'file2'], mode='rU'):
pass
这也可以在命令行中使用,因为它将使用sys.argv1:如果您这样做:
import fileinput
for line in fileinput.input(mode='rU'):
pass
您可以像这样传递shell中的文件:
$ python myscript.py file1 file2
https://stackoverflow.com/questions/21825984
复制相似问题