2013-03-27 89 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