更Pythonic的跳过头行方法

9 投票
9 回答
18853 浏览
提问于 2025-04-15 15:59

有没有更简洁(也许更符合Python风格)的方法来打开一个文本文件,并跳过那些以注释字符开头的行呢?

换句话说,就是有没有更好更整洁的方式来完成下面这个操作:

fin = open("data.txt")
line = fin.readline()
while line.startswith("#"):
    line = fin.readline()

9 个回答

10
from itertools import dropwhile
for line in dropwhile(lambda line: line.startswith('#'), file('data.txt')):
    pass

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

14
for line in open('data.txt'):
    if line.startswith('#'):
        continue
    # work with line

当然,如果你注释的代码行只在文件的开头,你可以使用一些优化的方法。

16

在我学习Python的过程中,我觉得这样做最符合Python的风格:

def iscomment(s):
   return s.startswith('#')

from itertools import dropwhile
with open(filename, 'r') as f:
    for line in dropwhile(iscomment, f):
       # do something with line

就是跳过文件顶部所有以#开头的行。要跳过所有以#开头的行:

from itertools import ifilterfalse
with open(filename, 'r') as f:
    for line in ifilterfalse(iscomment, f):
       # do something with line

这对我来说几乎完全是为了提高可读性;在功能上,下面这两种写法几乎没有区别:

for line in ifilterfalse(iscomment, f))

for line in (x for x in f if not x.startswith('#'))

把测试部分单独放到一个函数里,可以让代码的意图更清晰;这也意味着如果你对注释的定义有了变化,你只需要在一个地方进行修改。

撰写回答