我有两个文件,我想对它们执行一些逐行操作(一个接一个)。我现在使用两个循环来实现这一点。有没有办法在一个循环中做到这一点(在 python 2.7 中):
for fileName in [fileNam1,fileName2]:
for line in open(fileName):
do something
我有两个文件,我想对它们执行一些逐行操作(一个接一个)。我现在使用两个循环来实现这一点。有没有办法在一个循环中做到这一点(在 python 2.7 中):
for fileName in [fileNam1,fileName2]:
for line in open(fileName):
do something
正如已经指出的那样,itertools.chain
这是一个选项,但是还有另一个有用的标准模块,它避免了显式使用open
...
import fileinput
for line in fileinput.input(['file1.txt', 'file2.txt']):
print line
这也有一些方便的功能,用于行号和文件名等...查看http://docs.python.org/library/fileinput.html上的文档
回复评论 - 与上下文管理器一起使用
from contextlib import closing
with closing(fileinput.input(['file1.txt', 'file2.txt'])) as infiles:
for line in infiles:
pass # stuff
该itertools
模块为此提供了一个工具。试试这个:
import itertools
for line in itertools.chain(open(file_name1), open(file_name2)):
# do something
不完全是您所要求的,但 fileinput 模块可能很有用。
"""帮助类快速编写所有标准输入文件的循环。 典型用途是: 导入文件输入 对于 fileinput.input() 中的行: 流程(线) 这会遍历 sys.argv[1:] 中列出的所有文件的行, 如果列表为空,则默认为 sys.stdin。如果文件名是 '-' 它 也被 sys.stdin 取代。指定一个替代列表 文件名,将其作为参数传递给 input()。单个文件名是 也允许。 函数 filename(), lineno() 返回文件名和累积行 刚刚读取的行号;filelineno() 返回其 当前文件中的行号;isfirstline() 返回真当且仅当 刚刚读取的行是其文件的第一行;isstdin() 返回真 如果该行是从 sys.stdin 中读取的。函数 nextfile() 关闭 当前文件,以便下一次迭代将读取第一行 下一个文件(如果有);未从文件中读取的行将不计入 朝向累积行数;文件名直到 在读取下一个文件的第一行之后。函数关闭() 关闭序列。 ...
也许您可以使用列表理解或 map、reduce、filter 等来避免内部循环。这完全取决于您的需要。你想做什么?
这是我的第一个回答,如有错误请见谅
>>> file1 = open('H:\\file-1.txt')
>>> file2 = open('H:\\file-2.txt')
>>> for i, j in map(None, file1.readlines(), file2.readlines()):
print i,j