我做了一个非常简单的操作;打开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中获得类似的性能?
答案 0 :(得分:1)
如果我理解正确的话,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()
在最后一行收盘)
之前。
答案 1 :(得分:1)
你的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由于某种原因更快: