簡體   English   中英

如何使用 mdfreader 從 AWS S3 讀取 .dat 文件

[英]How to read .dat file from AWS S3 using mdfreader

我正在使用 Python 3.7 並嘗試從 AWS S3 讀取一個 .dat 文件,並在某些邏輯上將其轉換為一個或多個 CSV。 我們在 Python 中使用mdfreader庫。

import mdfreader
import pandas as pd

def convert_mdf_to_csvs(file_name, output_file_loc) :
    yop=mdfreader.Mdf(file_name)

    yop.convert_to_pandas()
    # print(list(yop.keys()))
    # print([keys for keys in list(yop.keys()) if keys.endswith("group")])
    all_groups_keys = [keys for keys in list(yop.keys()) if keys.endswith("group")]
    for keys in all_groups_keys :
        print(yop[keys])
        timeframe = keys.split("group")[0]
        yop[keys].to_csv(str(output_file_loc) +  str(timeframe) + ".csv" )

上面的代碼在本地機器上運行良好,但由於 AWS S3 是對象存儲,所以讀取將使用 boto3,但由於 mdfreader 庫方面缺乏文檔,我不太確定如何將此讀取流傳遞到“yop=mdfreader.Mdf(file_name)”函數? Mdf 函數似乎接受完整的文件路徑。 我知道我可以將它復制到 Lambda 的 tmp 並使用它,但由於這是一個 hack,我不想這樣做。

在 SO Q/A 上進行了相當多的搜索,但沒有得到從 AWS S3 讀取的 .dat 文件類型的清晰度。

另外,有沒有更好的方法來解決這個問題,也許使用簡單的 csv 庫或其他任何東西?

有什么幫助嗎?

最簡單的方法是使用download_file()將文件從 Amazon S3 下載到本地磁盤上的/tmp/

然后,您可以使用現有代碼來處理該文件。 這絕對不是“黑客”——它是一種常用的技術。 它肯定比流式傳輸文件更可靠。

可用存儲量有限制,AWS Lambda 容器可以重復使用,所以要么在使用后刪除臨時文件,要么每次都使用相同的文件名(例如/tmp/temp.dat )以覆蓋之前的版本.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM