Python 文本文件 read/write 优化
Python text file read/write optimization
我一直在处理这个文件 i/o 并在浏览网站时取得了一些进展,我想知道还有哪些其他方法可以优化它。我正在解析一个 10GB/30MM 行的测试输入文件,并将导致 aprog 1.4GB 干净文件的字段写入输出文件。最初,运行 这个过程需要 40m,我已将其减少到 30m 左右。在 python 中,任何人都有任何其他想法来减少这种情况。从长远来看,我将寻求用 C++ 编写它——我只需要先学习这门语言。提前致谢。
with open(fdir+"input.txt",'rb',(50*(1024*1024))) as r:
w=open(fdir+"output0.txt",'wb',50*(1024*1024)))
for i,l in enumerate(r):
if l[42:44]=='25':
# takes fixed width line into csv line of only a few cols
wbun.append(','.join([
l[7:15],
l[26:35],
l[44:52],
l[53:57],
format(int(l[76:89])/100.0,'.02f'),
l[89:90],
format(int(l[90:103])/100.0,'.02f'),
l[193:201],
l[271:278]+'\n'
]))
# write about every 5MM lines
if len(wbun)==wsize:
w.writelines(wbun)
wbun=[]
print "i_count:",i
# splits about every 4GB
if (i+1)%fsplit==0:
w.close()
w=open(fdir+"output%d.txt"%(i/fsplit+1),'wb',50*(1024*1024)))
w.writelines(wbun)
w.close()
尝试 运行在 Pypy (https://pypy.org) 中使用它,它将 运行 无需更改您的代码,而且速度可能更快。
此外,C++ 可能有点矫枉过正,尤其是在您还不知道它的情况下。考虑改为学习围棋或 D。
我一直在处理这个文件 i/o 并在浏览网站时取得了一些进展,我想知道还有哪些其他方法可以优化它。我正在解析一个 10GB/30MM 行的测试输入文件,并将导致 aprog 1.4GB 干净文件的字段写入输出文件。最初,运行 这个过程需要 40m,我已将其减少到 30m 左右。在 python 中,任何人都有任何其他想法来减少这种情况。从长远来看,我将寻求用 C++ 编写它——我只需要先学习这门语言。提前致谢。
with open(fdir+"input.txt",'rb',(50*(1024*1024))) as r:
w=open(fdir+"output0.txt",'wb',50*(1024*1024)))
for i,l in enumerate(r):
if l[42:44]=='25':
# takes fixed width line into csv line of only a few cols
wbun.append(','.join([
l[7:15],
l[26:35],
l[44:52],
l[53:57],
format(int(l[76:89])/100.0,'.02f'),
l[89:90],
format(int(l[90:103])/100.0,'.02f'),
l[193:201],
l[271:278]+'\n'
]))
# write about every 5MM lines
if len(wbun)==wsize:
w.writelines(wbun)
wbun=[]
print "i_count:",i
# splits about every 4GB
if (i+1)%fsplit==0:
w.close()
w=open(fdir+"output%d.txt"%(i/fsplit+1),'wb',50*(1024*1024)))
w.writelines(wbun)
w.close()
尝试 运行在 Pypy (https://pypy.org) 中使用它,它将 运行 无需更改您的代码,而且速度可能更快。
此外,C++ 可能有点矫枉过正,尤其是在您还不知道它的情况下。考虑改为学习围棋或 D。