关于阅读小文件的python风格问题

标签 python coding-style idioms

在命名文件中读取最 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/

相关文章:

java - 有没有更简单的方法来取消引用 Java 中的可空引用?

java - 在 switch 语句中使用 "default"case 是一个好习惯吗?

architecture - 在 MongoDB 中存储单个 "first-class"列表的惯用方法?

haskell - 在 Haskell 中程序生成大量值列表——最惯用的方法?内存管理?

Java 字符串参数

python - 通过数据库的另一个函数调用函数中的变量

python - Facebook 杯飞旋镖编程

python - PySerial : Port must be configured before it can be used 的问题

math - 在 Python 中编写简单数学计算的最佳实践

java - Python 和 Java 进行 Base64 解码的区别