处理大型 .asc 文件的最快方法是什么?
What is the fastest way to process large .asc files?
我目前有从 CANoe 生成的 .asc 日志文件。我正在使用 python 来分析这些文件。这些文件非常大(从 .5GB 到 2GB 不等)。为了 read/analyze 数据,我将数据转换为数据帧,我使用以下代码行来执行此操作:
log=can.ASCReader(filePath)
log=[*log]
df_data = [{'timestamp':m.timestamp, 'data':m.data} for m in log]
df = pd.DataFrame(df_data)
通过我的分析,花费时间最长的部分是将迭代器转换为列表。我想知道是否有更有效的方法来做到这一点。如果速度更快,我也愿意以全新的方式完成整个过程。目前,一个 .6gb 的 .asc 文件大约需要 19 分钟才能 运行。任何 help/suggestiosn 将不胜感激!
最耗时的部分很可能是从磁盘读取。这是无法避免的。
但是,您可以确保不要将不必要的数据放入内存或四处复制。
尝试以下操作:
import operator
log=can.ASCReader(filePath)
pd.DataFrame(data=map(operator.attrgetter('timestamp', 'data'), log))
ASCReader
将 return 一个迭代器,即在您使用 log
.
之前不读取数据
由于您只对timestamp
和data
后面的值感兴趣,我们声明和attrgetter这两个属性。这是一个接受对象的函数,并且 return 只是该对象的两个给定属性。
为了将此 attrgetter 应用于日志,我们将使用 map
。 map
会将 attrgetter 应用于 log
的每个元素。 map
也 return 是一个迭代器,即在使用之前它不会读取和存储任何数据。
最后我们把地图给pandas作为构建DataFrame
的数据源。
这样做应该是复制数据或处理不必要数据最少的方法。 YMMV
我目前有从 CANoe 生成的 .asc 日志文件。我正在使用 python 来分析这些文件。这些文件非常大(从 .5GB 到 2GB 不等)。为了 read/analyze 数据,我将数据转换为数据帧,我使用以下代码行来执行此操作:
log=can.ASCReader(filePath)
log=[*log]
df_data = [{'timestamp':m.timestamp, 'data':m.data} for m in log]
df = pd.DataFrame(df_data)
通过我的分析,花费时间最长的部分是将迭代器转换为列表。我想知道是否有更有效的方法来做到这一点。如果速度更快,我也愿意以全新的方式完成整个过程。目前,一个 .6gb 的 .asc 文件大约需要 19 分钟才能 运行。任何 help/suggestiosn 将不胜感激!
最耗时的部分很可能是从磁盘读取。这是无法避免的。
但是,您可以确保不要将不必要的数据放入内存或四处复制。
尝试以下操作:
import operator
log=can.ASCReader(filePath)
pd.DataFrame(data=map(operator.attrgetter('timestamp', 'data'), log))
ASCReader
将 return 一个迭代器,即在您使用 log
.
由于您只对timestamp
和data
后面的值感兴趣,我们声明和attrgetter这两个属性。这是一个接受对象的函数,并且 return 只是该对象的两个给定属性。
为了将此 attrgetter 应用于日志,我们将使用 map
。 map
会将 attrgetter 应用于 log
的每个元素。 map
也 return 是一个迭代器,即在使用之前它不会读取和存储任何数据。
最后我们把地图给pandas作为构建DataFrame
的数据源。
这样做应该是复制数据或处理不必要数据最少的方法。 YMMV