2013-03-27 92 views
3

我有两个文件:一个头文件和正文。我是使用库来读取整个事情。我可以使用“fileinput.input”创建一个FileInput对象,并将其传递给读取数据的库。问题是FileInput对象没有一个'.read'属性,这个库似乎是期望的。python:打开两个文件作为一个文件对象

我需要一个带有.read的FileObject,就像将两个文件一起读取一样。

任何想法现有的解决方法?是的,我知道我可以一起建立自己的小班或猫文件。只是想知道是否有一些我从未听说过的神奇的FileObject木匠。

回答

2

如果您的库从文件.read()中读取,将多个文件对象合并为一个抽象概念没有太多意义。阅读所有内容并将其扔入StringIO是相当简单的。

+0

我想唯一的问题是,如果你有一个头文件3行,然后大量的行。在这种情况下,我认为StringIO可能会占用大量内存。 – mathtick 2013-03-27 14:16:30

1

,如果你只是想呼吁文件的ReadLine(),试试这个:

def cat(*args): 
    for arg in args: 
     with open(arg,'r') as f: 
      for line in f: 
       yield line 

for line in cat('/tmp/x1','/tmp/x2'): 
    processLine(line) 
+0

我想我想要的是一个文件对象,它与将文件一起捕获然后打开组合文件是无法区分的。使用tmp文件很好,但我想知道python中是否有一些神奇的连接器。 – mathtick 2013-03-27 14:48:57

1

你的文件对象已经通过迭代的发生器,所以只用itertools到它们链成一个大的迭代。

import itertools 
all_the_things = itertools.chain(HeaderFile, BodyFile) 
for line in all_the_things: 
    # your code here 
+0

这不起作用。 all_the_things.read不存在。是的,使用.read并不好,但我不能改变我使用的库,那就是游戏。 – mathtick 2013-03-27 18:21:46