在命名文件中读取最 pythonic 的方法是什么,去除空行、仅包含空格或以 # 作为第一个字符,然后处理剩余的行?假设这一切很容易记住。
注意:做到这一点并不难——我所要求的是最 pythonic 的方式。我一直在编写大量 Ruby 和 Java,但已经失去了感觉。
这是一个稻草人:
file_lines = [line.strip() for line in open(config_file, 'r').readlines() if len(line.strip()) > 0]
for line in file_lines:
if line[0] == '#':
continue
# Do whatever with line here.
我对简洁感兴趣,但不会以变得难以阅读为代价。
最佳答案
生成器非常适合此类任务。它们是可读的,保持关注点的完美分离,并且在内存使用和时间方面高效。
def RemoveComments(lines):
for line in lines:
if not line.strip().startswith('#'):
yield line
def RemoveBlankLines(lines):
for line in lines:
if line.strip():
yield line
现在将这些应用到您的文件中:
filehandle = open('myfile', 'r')
for line in RemoveComments(RemoveBlankLines(filehandle)):
Process(line)
在这种情况下,很明显这两个生成器可以合并为一个生成器,但我将它们分开以展示它们的可组合性。
关于关于阅读小文件的python风格问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2182082/