如何使用 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/
。
然后,您可以使用现有代码来处理该文件。这绝对是 不是 而是 'hack' -- 这是一种常用的技术。它肯定比流式传输文件更可靠。
可用存储量有限制,AWS Lambda 容器可以重复使用,所以要么在使用后删除临时文件,要么每次都使用相同的文件名(例如/tmp/temp.dat
)以便它覆盖以前的版本。
我正在使用 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/
。
然后,您可以使用现有代码来处理该文件。这绝对是 不是 而是 'hack' -- 这是一种常用的技术。它肯定比流式传输文件更可靠。
可用存储量有限制,AWS Lambda 容器可以重复使用,所以要么在使用后删除临时文件,要么每次都使用相同的文件名(例如/tmp/temp.dat
)以便它覆盖以前的版本。