禁止Python方式批量csv转换使用熊猫外

时间:2014-05-03 06:47:45

标签: python csv numpy

我正在寻找关于写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?

1 个答案:

答案 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