更Pythonic的跳过头行方法
有没有更简洁(也许更符合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('#'))
把测试部分单独放到一个函数里,可以让代码的意图更清晰;这也意味着如果你对注释的定义有了变化,你只需要在一个地方进行修改。