我正在使用 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 庫或其他任何東西?
有什么幫助嗎?
uj5u.com熱心網友回復:
最簡單的方法是使用download_file()將檔案從 Amazon S3 下載到/tmp/本地磁盤。
然后,您可以使用現有代碼來處理該檔案。這絕對不是“黑客”——它是一種常用的技術。它肯定比流式傳輸檔案更可靠。
可用存盤量有限制,并且 AWS Lambda 容器可以重復使用,因此要么在使用后洗掉臨時檔案,要么/tmp/temp.dat每次使用相同的檔案名(例如 ),以便覆寫之前的版本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/477966.html
標籤:Python 亚马逊网络服务 CSV 亚马逊-s3 博托3
上一篇:IndexError:使用moto列出超出范圍的索引
下一篇:g 不能用-I改變包含路徑
