我正在做一个非常简单的操作:打开一个csv文件,删除第一列,然后写入一个新文件。以下代码工作正常,但在我的700 MB文件上需要50-60秒:
import csv
from time import time
#create empty output file
f = open('testnew.csv',"w")
f.close()
t = time()
with open('test.csv',"rt") as source:
rdr= csv.reader( source )
with open('testnew.csv',"a") as result:
wtr= csv.writer( result )
for r in rdr:
del r[0]
_ = wtr.writerow( r )
print(round(time()-t))
相比之下,下面的shell脚本在7-8秒内完成了相同的操作:
START_TIME=$SECONDS
cut -d',' -f2- < test.csv > testnew.csv
echo $(($SECONDS - $START_TIME))
有什么方法可以在Python中获得类似的性能吗?
发布于 2015-01-01 20:27:46
如果我正确理解,shell脚本只是在第一个,
上拆分行,不管它是否用引号括起来,并写出第二个部分。(如果没有,
,我不知道shell脚本会做什么。)csv方法做的更多,这对你来说是无用的。若要执行与python中的shell相同的操作,请跳过csv模块。
for line in source:
parts = line.split(',', maxsplit=1)
source.write(parts[len(parts)-1])
这将传递没有逗号的行。它在逗号之后保留空格(我不知道cut
做什么。如果不想这样做,可以使用re.split
而不是line.split
,或者在最后一行的关闭)
之前添加.lstrip()
。
发布于 2015-01-01 20:30:53
您的bash脚本不解析csv文件,只拆分和剪切。因此,在python中,我们也可以这样做:
with open('test.csv',"r") as source:
with open('testnew.csv',"w") as result:
for l in source:
_, tail = l.split(',', 1)
result.write(tail)
我的简单分析(4Mb文件):
由于某些原因,Python 2速度更快:
https://stackoverflow.com/questions/27734024
复制相似问题