我正在寻找关于写csv的禁食方式的建议(不使用熊猫,这是最后的手段)。例如,我有70个文件,其中每个值都需要反转。所以像;
fname = F1, F2, F3, ...
def csvdump(files)
date, time, opens, high, low, close, vol = genfromtxt(str(files)+'.csv',unpack=True, delimiter=',')
for line in high:
x=str(1/line)
outr=open(str(files)+"inverse.txt", "a")
outr.write(x)
outr.write('\n')
for io in fname:
csvdump(io)
但对于70个文件,这需要3分钟,是否有更快的方式来做到这一点而不需要学习Pandas?
答案 0 :(得分:3)
你可以尝试numpy.savetxt;它似乎(不完全)在这个测试中快了三倍;我不知道它是如何扩展的。 savetxt可以添加分隔符(请参阅下面的示例中的makebigfile
)。
你的一些代码有点不寻常,比如str(files)
;我希望文件名已经是字符串了吗?
import numpy
import timeit
def makebigfile(outname):
data = numpy.random.standard_normal((100000, 7))
numpy.savetxt(outname, data, delimiter=",")
def csvdump(files, original=True):
date, time, opens, high, low, close, vol = numpy.genfromtxt(str(files)+'.csv', unpack=True, delimiter=',')
if original:
for line in high:
x=str(1/line)
outr=open(str(files)+"inverse-original.txt", "a")
outr.write(x)
outr.write('\n')
else:
numpy.savetxt(str(files)+"inverse-savetxt.txt",1/high)
makebigfile('foo.txt')
print timeit.timeit(stmt='__main__.csvdump("foo",True)',setup='import __main__',number=1000)
print timeit.timeit(stmt='__main__.csvdump("foo",False)',setup='import __main__',number=1000)
在我的系统上,这给出了:
1.41840219498
0.56161403656