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

前端之家收集整理的这篇文章主要介绍了如何在Windows上使用Python处理包含EOF / Ctrl-Z字符的大文本文件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要使用Python脚本处理许多以逗号分隔的大型文本文件(最大值大约为15GB).问题是文件偶尔会在它们中间包含DOS EOF(Ctrl-Z)字符. (不要问我为什么,我没有生成它们.)另一个问题是文件在Windows机器上.

在Windows上,当我的脚本遇到其中一个字符时,它会认为它位于文件的末尾并停止处理.由于各种原因,我不允许将文件复制到任何其他计算机.但我仍然需要处理它们.

以下是我的想法:

>以二进制模式读取文件,抛出等于chr(26)的字节.这样可行,但需要大约永远.
>使用像sed这样的东西来消除EOF字符.不幸的是,据我所知,Windows上的sed有同样的问题,当它看到EOF时会退出.
>使用某种记事本程序并进行查找和替换.但事实证明,Notepad类型的程序无法很好地处理15GB文件.

我的IDEAL解决方案只是将文件作为文本读取而忽略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字符是你唯一的问题吗?很难想象一种理智的方式,它们最终可能会被用作文本文件文件.

猜你在找的Windows相关文章