为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用大型数据集在python中查找和替换字符串

如何使用大型数据集在python中查找和替换字符串

慕后森 2022-06-22 16:46:50
我正在尝试更改大约 4GB 的大文件的分隔符。分隔符当前为“#|#”,我希望分隔符为“|”。我尝试进行替换和查找,但由于文件很大,我的计算机没有足够的内存来完成代码。我想知道是否有一种方法可以逐行读取文件以节省内存。text = open("C:\\test.txt", "r")text = ''.join([i for i in text]).replace("#|#", "|")x = open("C:\\test.txt","w")x.writelines(text)x.close()这是文件当前的样子:场#|#场#|#场#|#我希望它看起来像领域 | 领域 | 领域 |
查看完整描述

2 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

当然,您可以逐行编写。事实上,一般来说,文件处理在使用文件对象作为上下文管理器和行迭代器的更惯用的方式中更实用:


import shutil


with open("C:\\test.txt", "r") as long_file, \

     open("C:\\test_replaced.tmp", "w") as replacement:

    for line in long_file:

        replacement.write(line.replace("#|#", "|"))


shutil.move("C:\\test_replaced.tmp", "C:\\test.txt")

只要您可以将临时文件写入磁盘而不会造成麻烦,这就会起作用。我没有一个好的、简洁的解决方案,使用标准库对文件进行就地更改,但这应该比迭代同一个文件两次并将整个内容读入内存要快得多,内存效率也更高。


查看完整回答
反对 回复 2022-06-22
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

尝试使用生成器而不是将整个文件读入内存:


text = open("C:\\test.txt", "r")

text = ''.join((i for i in text)).replace("#|#", "|")

x = open("C:\\test.txt","w")

x.writelines(text)

x.close()

(i for i in text)语法允许延迟生成行,而不是将[i for i in text]所有行加载到内存


查看完整回答
反对 回复 2022-06-22
  • 2 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信