2014-10-07 54 views
0

讀取文件這裏我的問題,它可能不是很複雜,但我正在學習Python。我試圖讀取多個文件(所有格式都相同),同時必須從第32行開始讀取它們,但我沒有找到最有效的方法。使用fileinput.input()從X行

這裏我的代碼至今:

for file in fileinput.input(): 
    entries = [f.strip().split("\t") for f in file].readlines()[32:] 

這給錯誤:AttributeError的: '名單' 對象有沒有屬性 'readlines方法'

我知道另一種可能性是:

sources = open(sys.argv[1], "r").readlines()[32:] 

然後就在命令行上python3.2 script.py data/* .csv。但這似乎不能正常工作。

非常感謝您的幫助。

回答

0

可以使用openhook說法。

根據the module documentation

You can control how files are opened by providing an opening hook via the openhook parameter to fileinput.input() or FileInput() . The hook must be a function that takes two arguments, filename and mode, and returns an accordingly opened file-like object. Two useful hooks are already provided by this module.

import fileinput 

def skip32(filename, mode): 
    f = open(filename, mode) 
    for i in range(32): 
     f.readline() 
    return f 

entries = [line.strip().split('\t') for line in fileinput.input(openhook=skip32)] 

BTW,最後一行可以用(使用csv模塊)替換爲:

import csv 
entries = list(csv.reader(fileinput.input(openhook=skip32), delimiter='\t')) 
+0

感謝您的回答falsetru!我想知道是否可以用同樣的方法從特定行中讀取多個文件,即我擁有的文件非常混亂,我需要的信息並不總是在同一行(32),但它們都是在某個時刻包含正確的信息。我怎樣才能讀取它們,例如我找到一個特定模式的行,比如ID [tab] NAME [tand] GEO [tab] FEATURE。這是否有可能? – 2014-10-08 15:05:48

+0

@El_Patrón,我不明白你的意思。如何發佈一個單獨的問題? – falsetru 2014-10-08 15:08:24

+0

我剛剛添加了一個更新我的問題,如果多數民衆贊成 – 2014-10-08 15:10:46

0

這只是一個小的語法

entries = [f.strip().split("\t") for f in file].readlines()[32:] 

應該是:

entries = [f.strip().split("\t") for f in file.readlines()][32:] 
+0

謝謝你文森特,不幸的是我得到的錯誤:AttributeError的:'str'對象沒有屬性'readlines' – 2014-10-07 15:03:44

+0

然後文件不是文件對象而是字符串。文件代表什麼? – 2014-10-07 15:11:47

+0

它們是10個製表符分隔的文件(格式爲.csv),這些文件包含製表符分隔的字符串。我試圖打開並從命令行讀取它們:python3.2 script.py data/*。csv,因爲我需要打開它們並循環 – 2014-10-07 15:17:21