繁体   English   中英

处理 large.asc 文件的最快方法是什么?

[英]What is the fastest way to process large .asc files?

我目前有从 CANoe 生成的 .asc 日志文件。 我正在使用 python 来分析这些文件。 这些文件非常大(从 5GB 到 2GB 不等)。 为了读取/分析数据,我将数据转换为 dataframe,并且我使用以下代码行来执行此操作:

    log=can.ASCReader(filePath)
    log=[*log]
    df_data = [{'timestamp':m.timestamp, 'data':m.data} for m in log]
    df = pd.DataFrame(df_data)

通过我的分析,耗时最长的部分是将迭代器转换为列表。 我想知道是否有更有效的方法来做到这一点。 如果速度更快,我也愿意以全新的方式完成整个过程。 目前运行 a.6gb.asc 文件大约需要 19 分钟。 任何帮助/建议将不胜感激!

最耗时的部分很可能是从磁盘读取。 这是无法避免的。

但是,您可以确保不要将不必要的数据放入 memory 或复制它。

尝试以下操作:

import operator
log=can.ASCReader(filePath)
pd.DataFrame(data=map(operator.attrgetter('timestamp', 'data'), log))

ASCReader将返回一个迭代器,即在您使用log之前不读取数据。

由于您只对timestampdata背后的值感兴趣,因此我们为这两个属性声明和attrgetter 这是一个 function,它采用 object 并将仅返回 object 的两个给定属性。

为了将此属性应用于日志,我们将使用map map将 attrgetter 应用于log的每个元素。 map还返回一个迭代器,即在使用之前它不会读取和存储任何数据。

最后,我们将 map 放入 pandas 作为构建DataFrame的数据源。

这样做应该是最少复制数据或处理不必要数据的方法。 YMMV

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM