如何在Python中特殊处理文件的第一行?

9 投票
4 回答
2730 浏览
提问于 2025-04-15 14:41

我经常需要处理一些大文本文件,这些文件的第一行是标题。标题通常和文件的其他内容处理方式不同,或者我对其他内容的处理还依赖于这些标题。无论如何,我都需要把第一行当作一个特殊的情况来处理。

我可以用简单的逐行读取方法,并设置一个标记:

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

但是我不喜欢在循环中做一个测试,因为这个测试在执行的数百万次中,只有一次是有用的。有没有更好的方法?我能不能把第一行单独处理,然后让循环从第二行开始?我应该为这个问题烦恼吗?

4 个回答

3

使用 iter()

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

for line in it_f:
    processBody(line)

这个方法可以用于任何可迭代的对象。

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

这个可以用。

补充:

.__next__ 改成了 next(它们其实是一样的,不过我觉得用 next 更简洁)。

关于 fileopen,我觉得 file 更清晰,所以我会继续偏好用 file 而不是 open

17

你可以这样做:

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

撰写回答