我需要使用Python脚本处理许多以逗号分隔的大型文本文件(最大值大约为15GB).问题是文件偶尔会在它们中间包含DOS EOF(Ctrl-Z)字符. (不要问我为什么,我没有生成它们.)另一个问题是文件在Windows机器上.
在Windows上,当我的脚本遇到其中一个字符时,它会认为它位于文件的末尾并停止处理.由于各种原因,我不允许将文件复制到任何其他计算机.但我仍然需要处理它们.
以下是我的想法:
>以二进制模式读取文件,抛出等于chr(26)的字节.这样可行,但需要大约永远.
>使用像sed这样的东西来消除EOF字符.不幸的是,据我所知,Windows上的sed有同样的问题,当它看到EOF时会退出.
>使用某种记事本程序并进行查找和替换.但事实证明,Notepad类型的程序无法很好地处理15GB文件.
使用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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。