我一直在用 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
是一个列表列表,其中子列表是一列数据。
性能上的差异似乎来自浮点转换。关于我可以在 IronPython 上做些什么来加快速度的任何想法?我什至尝试过提前读取文件,然后使用 System.Threading.Task.Parallel.ForEach 构造来解析文件行。那根本没有帮助。
谢谢。