在读取文件时用python实现生成器/iter

2024-05-12 20:55:16 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑制表分隔文件^ {< CD1> }:

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

谢谢


Tags: 文件代码txt目标forfooaswith
1条回答
网友
1楼 · 发布于 2024-05-12 20:55:16

我过去需要这样做,来处理大小超过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)

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

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

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

相关问题 更多 >