Joe*_*oel 7 python windows text sed eof
我有一些大的以逗号分隔的文本文件(最大的大约是15GB),我需要使用Python脚本进行处理.问题是文件偶尔会在它们中间包含DOS EOF(Ctrl-Z)字符.(不要问我为什么,我没有生成它们.)另一个问题是文件在Windows机器上.
在Windows上,当我的脚本遇到其中一个字符时,它会认为它位于文件的末尾并停止处理.由于各种原因,我不允许将文件复制到任何其他计算机.但我仍然需要处理它们.
以下是我的想法:
chr(26).这可行,但这将花费大约永远.sed来消除EOF字符.不幸的是,据我所知,sed在Windows上有同样的问题,当它看到EOF时会退出.Notepad程序并进行查找和替换.但事实证明,Notepad-type程序无法很好地处理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)
Run Code Online (Sandbox Code Playgroud)
这将文件路径作为其第一个参数,并将文件但没有chr(26)字节复制到.new附加的相同文件路径.小提琴味道.
顺便说一句,你确定 DOS EOF字符是你唯一的问题吗?这是很难想象的,他们可以在文件最后一个健全的方式意图被视为文本文件.