我经常需要在第一行处理包含标题的大型文本文件。标题通常与文件正文的处理方式不同,或者我对正文的处理依赖于标题。无论哪种方式,我需要将第一行视为特殊情况。 我可以使用简单的行迭代并设置一个标志:
headerProcessed = false
for line in f:
if headerProcessed:
processBody(line)
else:
processHeader(line)
headerProcessed = true
但是我不喜欢循环中的测试,除了执行数百万次之外的所有测试都是多余的。有没有更好的办法?我可以区别对待第一行,然后在第二行开始迭代吗?我应该被打扰吗?
答案 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
(他们 等效,但我认为接下来会更简洁。)
重新审视file
与open
,file
对我来说似乎更加清晰,因此我将继续优先于open
。
答案 2 :(得分:3)
使用iter()
it_f = iter(f)
header = it_f.next()
processHeader(header)
for line in it_f:
processBody(line)
它适用于任何可迭代对象。
答案 3 :(得分:2)
第一行包含标题的大型文本文件?所以它是表格数据。
只是为了确保:你看过csv模块了吗?它应该处理所有表格数据,除非字段没有分隔但是由位置定义。它也是标题的东西。