我一直在用python开发一个文件读取器,我希望在那里读取大约100MB的ascii文件。顶部有一堆标题信息,然后是制表符分隔的列。有些列包含非数字数据(我现在不关心)。我有一个matlab实现,它可以在不到1.5秒的时间内读取一个30MB的示例文件。我的python阅读器在CPython中大约需要2秒,而在IronPython中大约需要4秒。区别似乎在于字符串值被转换成浮点值的位置,但我无法在IronPython中使其更快。在
我在这里的最新迭代有以下循环来读取和解析这些行
#-Parse the actual data lines
istep = -1
while len(line) > 0:
istep += 1
#-Split the line and convert pasred values to floats
timestep = line.split();
for ichan in numericChannels:
data[ichan].append(float(timestep[ichan]))
line = f.readline().strip()
numericChannels
是一个整数列表,指定我要读取哪些频道。data
是一个列表列表,其中is sub list是一列数据。在
性能上的差异似乎来自于浮点转换。我能在IronPython上做些什么来加速这个过程吗?我甚至试过一段时间读过这个文件然后用系统线程化任务.并行.ForEach构造来解析文件行。那根本没用。在
谢谢。在
在我看来,像这样的事情可能会快一点。在
看来IronPython只是在读取文本文件时比CPython慢。我在Python的几个版本中运行了这个片段(partest2.txt文件在一行中给出了200000个数字):
结果:
IronPython运行时发出以下警告(不确定它是否会影响任何内容):
当被读取的文件(partest2.txt)被改变,使它有相同的200000个数字在它自己的行中给出,这里是计时(完全不同)
哎呀!在
a)你说“区别在于字符串值被转换成浮动的地方”——你为什么这么认为?你对代码运行了探查器吗?在
b)如果你有记忆力,那么做起来可能会更快
相关问题 更多 >
编程相关推荐