【发布时间】:2014-01-21 02:40:39
【问题描述】:
我在名为paths 的列表中有一个文件对象列表
我希望能够遍历并读取每个文件的第一行,对这个 n 元组数据做一些事情,然后移动到每个文件的第二行。 path中文件对象的数量是任意的。
这可能吗?
【问题讨论】:
我在名为paths 的列表中有一个文件对象列表
我希望能够遍历并读取每个文件的第一行,对这个 n 元组数据做一些事情,然后移动到每个文件的第二行。 path中文件对象的数量是任意的。
这可能吗?
【问题讨论】:
import itertools
for line_tuple in itertools.izip(*files):
whatever()
我会使用zip,但这会将文件的全部内容读入内存。注意files应该是一个文件对象列表;我不确定您所说的“文件处理程序列表”是什么意思。
【讨论】:
这取决于它实际上有多“任意”。只要数量小于操作系统的限制,itertools.izip 就可以正常工作(或 itertools.izip_longest 视情况而定)。
files = [open(f) for f in filenames]
for lines in itertools.izip(*files):
# do something
for f in files:
f.close()
如果您可以打开的文件多于您的操作系统允许您打开的文件,那么您就不走运了(至少就简单的解决方案而言)。
【讨论】:
itertools.izip -> zip 和 itertools.izip_longest -> itertools.zip_longest.
脑子里第一个想到的就是下面的代码,好像太直接了
fp_list = []
for file in path_array:
fp = open(file)
fp_list.append(fp)
line_list = []
for fp in fp_list:
line = fp.readline()
line_list.append(line)
## you code here process the line_list
for fp in fp_list:
fp.close()
【讨论】: