簡體   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