这可能更高级一点,但是,关于文件处理,我真的很喜欢做一些生成器流水线!
# this is a generator (an iterable) which only outputs a
# line containing "DNS" if it was requested in an iteration
# furthermore, the way i use a generator here is called "list comprehension"
dns_lines = ( line for line in open('/home/user/file','r') if "DNS" in line )
# the with-statement uses python's magic-methods to take care of
# opening and closing the file
with open("output", 'w') as f:
# enumerate works on generators
# it enumerates each item that is iterated over
# a tuple is returned (count, line)
for count_line in enumerate(dns_lines):
f.write("%d - %s" % (count_line))
David Beazley在此处了解有关生成器和文件处理的更多信息
我假设,你想了解更多关于 python 有多强大的信息。因此,我的长评论。:)
// 编辑:关于这里会发生什么的更多解释:
- 第一行将生成一个生成器对象。
- 文件读取将在第二个 for 循环中开始运行。
- 一旦开始此迭代,文件将被读取,直到找到包含“DNS”的行。
- 将创建一个元组(计数,行)并移交给这个迭代。
- 元组使用格式字符串写入文件!
- 下一次迭代将发生并请求下一行,这将再次开始文件读取。
我希望这有帮助!生成器防止将整个列表加载到内存中,它们允许许多巧妙的技巧和流水线处理。但是,它的内容比您在这篇文章中提到的要多得多!