微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

读取文件时在python中实现生成器/迭代器

如何解决读取文件时在python中实现生成器/迭代器

考虑制表符分隔的文件 foo.txt

chrY    1208806 1208908 +   .
chrY    1212556 1212620 +   .
chrY    1465479 1466558 +   .

目标是操纵 foo.txt 以获得 result.txt

chrY:1208806-1208908
chrY:1212556-1212620
chrY:1465479-1466558

代码有效:

with open(filename,'r') as f:
    for line in f:
        l = line.split()[0:3]
        result = f'{l[0]}:{l[1]}-{l[2]}'
        print(result)

但是如果 foo.txt一个无法放入内存的巨大文件,那么将每一行保存在列表 l 中是不可行的。如何将前面提到的代码写入 generator/iter

谢谢。

解决方法

我过去需要这样做,以处理大约 50GB 以上的文件。您需要做的只是在处理时写出每一行。

with open('foo.txt','r') as src,open('result.txt','w') as tgt:
    for line in src:
         l = line.split()[0:3]
         result = f'{l[0]}:{l[1]}-{l[2]}\n'
         tgt.write(result)

(注意 \n 中包含换行符 result

以这种方式处理大文件需要一段时间,但 RAM 使用量几乎没有增加。

我刚刚测试了多次复制的示例,效果很好。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。