gpt4 book ai didi

Python 不读取整个文本文件

转载 作者:太空狗 更新时间:2023-10-29 17:25:38 24 4
gpt4 key购买 nike

我遇到了一个问题,我没有在 StackOverflow 上看到任何人遇到过这个问题,甚至谷歌也没有看到过这个问题。

我的主要目标是能够用另一个字符串替换文件中出现的字符串。有没有办法能够访问文件中的所有行。

问题是,当我尝试读取一个大型文本文件 (1-2 gb) 的文本时,python 只读取其中的一个子集。

例如,我将执行一个非常简单的命令,例如:

newfile = open("newfile.txt","w")
f = open("filename.txt","r")
for line in f:
replaced = line.replace("string1", "string2")
newfile.write(replaced)

而且它只写入原始文件的前 382 MB。以前有没有人遇到过这个问题?

我尝试了几种不同的解决方案,例如使用:

import fileinput
for i, line in enumerate(fileinput.input("filename.txt", inplace=1)
sys.stdout.write(line.replace("string1", "string2")

但是效果是一样的。也不会分 block 读取文件,例如使用

f.read(10000)

我已经将它缩小到很可能是读入问题而不是写问题,因为它发生在简单地打印出行时。我知道还有更多行。当我用Vim等全文编辑器打开时,能看到最后一行应该是什么,不是python打印的最后一行。

任何人都可以提供任何建议或可以尝试的事情吗?

我目前使用的是 32 位版本的 Windows XP,内存为 3.25 gb,运行的是 Python 2.7

*找到编辑解决方案(感谢 Lattyware)。使用迭代器

def read_in_chunks(file, chunk_size=1000): 
while True:
data = file.read(chunk_size)
if not data: break
yield data

最佳答案

尝试:

f = open("filename.txt", "rb")

在 Windows 上,rb 表示以二进制模式打开文件。根据文档,文本模式与二进制模式仅对行尾字符有影响。但是(如果我没记错的话)我相信在 Windows 上以文本模式打开文件也会使用 EOF(十六进制 1A)。

你也可以在使用fileinput时指定模式:

fileinput.input("filename.txt", inplace=1, mode="rb")

关于Python 不读取整个文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9905874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com