python数字形式转换代码_python在numpy数组中转换带格式数字的字符串...

我有一个很大的ASCII文件(?100GB),其中包含大约1.000.000行的已知格式化数字,我尝试使用python处理它们.该文件太大,无法完全读入内存,因此我决定逐行处理该文件:

fp = open(file_name)

for count,line in enumerate(fp):

data = np.array(line.split(),dtype=np.float)

#do stuff

fp.close()

事实证明,我将程序的大部分运行时间都花在data =行中.有什么方法可以加快生产速度吗?而且,执行速度似乎比我从带格式读取的本机FORTRAN程序中获得的速度要慢得多(请参阅此question,我已经实现了FORTRAN字符串处理器并将其与f2py一起使用,但运行时间仅与数据相当=行.我猜想Python / FORTRAN之间的I / O处理和类型转换会杀死我从FORTRAN中获得的收益)

既然我知道格式,难道不应该有一种更好和更快的方式来使用split()吗?就像是:

data = readf(line,'(1000F20.10)')

我尝试了fortranformat程序包,该程序效果很好,但就我而言,它的速度比split()方法慢了三倍.

附:根据ExP和root的建议,我尝试了np.fromstring并使其成为快速而肮脏的基准测试:

t1 = time.time()

for i in range(500):

data=np.array(line.split(),dtype=np.float)

t2 = time.time()

print (t2-t1)/500

print data.shape

print data[0]

0.00160977363586

(9002,)

0.0015162509

和:

t1 = time.time()

for i in range(500):

data = np.fromstring(line,sep=' ',dtype=np.float,count=9002)

t2 = time.time()

print (t2-t1)/500

print data.shape

print data[0]

0.00159792804718

(9002,)

0.0015162509

所以fromstring实际上对我来说稍微慢一些.

你可能感兴趣的:(python数字形式转换代码)