首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中,如何遍历一个迭代器,然后再遍历另一个迭代器?

在Python中,如何遍历一个迭代器,然后再遍历另一个迭代器?
EN

Stack Overflow用户
提问于 2014-02-17 18:04:54
回答 2查看 3.3K关注 0票数 49

我想迭代两个不同的迭代器,就像这样:

代码语言:javascript
复制
file1 = open('file1', 'r')
file2 = open('file2', 'r')
for item in one_then_another(file1, file2):
    print item

我希望它打印file1的所有行,然后打印file2的所有行。

我想要一些通用的东西,因为迭代器可能不是文件,这只是一个例子。我知道我可以做到这一点:

代码语言:javascript
复制
for item in [file1]+[file2]:

但这会将两个文件都读入内存,这是我希望避免的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-17 18:05:56

使用itertools.chain

代码语言:javascript
复制
from itertools import chain
for line in chain(file1, file2):
   pass

fileinput模块也提供了类似的功能:

代码语言:javascript
复制
import fileinput
for line in fileinput.input(['file1', 'file2']):
   pass
票数 89
EN

Stack Overflow用户

发布于 2014-02-18 03:01:45

我认为解决这个特定文件问题的最具Pythonic风格的方法是使用fileinput模块(因为您要么需要复杂的上下文管理器,要么需要使用open处理错误),我将从Ashwini的示例开始,但添加一些东西。首先,最好使用通用换行支持的U标志打开(假设您的Python语言是用它编译的,大多数都是用它编译的),(r是默认模式,但显式比隐式好)。如果你和其他人一起工作,最好支持他们为你提供任何格式的文件。

代码语言:javascript
复制
import fileinput

for line in fileinput.input(['file1', 'file2'], mode='rU'):
   pass

这也可以在命令行中使用,因为它将使用sys.argv1:如果您这样做:

代码语言:javascript
复制
import fileinput

for line in fileinput.input(mode='rU'):
   pass

您可以像这样传递shell中的文件:

代码语言:javascript
复制
$ python myscript.py file1 file2
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21825984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档