使用来自X行的fileinput.input()读取文件

时间:2014-10-07 14:48:16

标签: python file-io

这里是我的问题,它可能不是很复杂,但我正在学习Python。我正在尝试读取多个文件(所有文件都具有相同的格式),同时必须从第32行开始读取它们,不知怎的,我找不到最有效的方法。

到目前为止我的代码:

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

给出错误:AttributeError:'list'对象没有属性'readlines'

我知道另一种可能性是:

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

然后只在命令行python3.2 script.py data / * .csv。但这似乎不能正常运作。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

它只是一个小语法

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

应该是:

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

答案 1 :(得分:0)

您可以使用openhook参数。

根据the module documentation

  

您可以通过提供开启挂钩来控制文件的打开方式   openhook参数为fileinput.input()FileInput()。钩子   必须是一个带有两个参数的函数,文件名和模式,以及   返回一个相应打开的文件类对象。两个有用的钩子是   已经由这个模块提供。

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'))