如何在Windows上使用Python处理包含EOF / Ctrl-Z字符的大型文本文件?

我有一些大的逗号分隔的文本文件(最大大约15GB),我需要使用Python脚本进行处理。 问题是这些文件偶尔在其中间包含DOS EOF(Ctrl-Z)字符。 (不要问我为什么,我没有生成它们)。另一个问题是这些文件在Windows机器上。

在Windows上,当我的脚本遇到这些字符之一时,它假定它在文件的末尾并停止处理。 出于各种原因,我不允许将文件复制到任何其他机器。 但是我仍然需要处理它们。

这是我迄今为止的想法:

  1. 以二进制模式读取文件,抛出等于chr(26)字节。 这将工作,但这将需要大约永远。
  2. 使用类似sed东西来消除EOF字符。 不幸的是,据我所知,Windows上的sed有相同的问题,并会看到EOF退出。
  3. 使用某种Notepad程序并执行查找和replace。 但事实certificate, Notepadtypes的程序不能很好地处理15GB的文件。

我的IDEAL解决scheme是以文本forms读取文件的某种方式,而忽略Ctrl-Z字符。 有没有合理的方法来完成这个?

使用Python删除DOS EOF字符很容易; 例如,

 def delete_eof(fin, fout): BUFSIZE = 2**15 EOFCHAR = chr(26) data = fin.read(BUFSIZE) while data: fout.write(data.translate(None, EOFCHAR)) data = fin.read(BUFSIZE) import sys ipath = sys.argv[1] opath = ipath + ".new" with open(ipath, "rb") as fin, open(opath, "wb") as fout: delete_eof(fin, fout) 

这需要一个文件路径作为其第一个参数,并将文件复制但没有chr(26)字节到与.new相同的文件路径。 小提琴的味道。

顺便问一下,你确定 DOS EOF字符是你唯一的问题吗? 很难想象一个可以最终成为文本文件的理想文件。