如何在Python中以不同方式处理文件的第一行?

时间:2009-09-30 06:46:59

标签: python file iteration

我经常需要在第一行处理包含标题的大型文本文件。标题通常与文件正文的处理方式不同,或者我对正文的处理依赖于标题。无论哪种方式,我需要将第一行视为特殊情况。 我可以使用简单的行迭代并设置一个标志:

headerProcessed = false
for line in f:
    if headerProcessed:
        processBody(line)
    else:
        processHeader(line)
        headerProcessed = true

但是我不喜欢循环中的测试,除了执行数百万次之外的所有测试都是多余的。有没有更好的办法?我可以区别对待第一行,然后在第二行开始迭代吗?我应该被打扰吗?

4 个答案:

答案 0 :(得分:16)

你可以:

processHeader(f.readline())
for line in f:
    processBody(line)

答案 1 :(得分:8)

f = file("test")
processHeader(f.next()) #or next(f) for py3
for line in f:
    processBody(line)

这很有效。

编辑:

.__next__更改为next(他们 等效,但我认为接下来会更简洁。)

重新审视fileopenfile对我来说似乎更加清晰,因此我将继续优先于open

答案 2 :(得分:3)

使用iter()

it_f = iter(f)
header = it_f.next()
processHeader(header)

for line in it_f:
    processBody(line)

它适用于任何可迭代对象。

答案 3 :(得分:2)

第一行包含标题的大型文本文件?所以它是表格数据。

只是为了确保:你看过csv模块了吗?它应该处理所有表格数据,除非字段没有分隔但是由位置定义。它也是标题的东西。