如何使用 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)以便它覆盖以前的版本。