首页 > 解决方案 > 如何在 aws lambda 的 tmp 目录中使用 pandas 读取 csv

问题描述

我正在编写一个 lambda 以将一些数据从 csv 读取到数据帧中,操作所述数据然后将其转换回 csv 并在 python lambda 上使用新的 csv 进行 api 调用。

我在使用 pandas.read_csv 命令时遇到了问题。它结束了我的 lambdas 触发器执行,没有错误。

os.chdir('/tmp')
for root, dirs, files in os.walk('/tmp', topdown=True):
    for name in files:
        if '.csv' in name:
            testdic[name] = root
            print(os.path.isfile('/tmp/' + name))
            print(os.path.isfile(name))
            df = pd.read_csv(name)
            df = pd.read_csv('/tmp/' + name)

os.path.isfile 都返回 true,并且我尝试了 read_csv 的两个版本,它们都不起作用并且过早地结束 lambda 而没有错误。

我已确认 csv 已下载到 lambda tmp 目录中,我可以读取并打印 tmp 中的 csv 行。但是,当我运行 = pd.read_csv('/tmp/file.csv') 或将我的目录更改为 /tmp 并执行 = pd.read_csv('file.csv') 时,它会以没有错误的方式结束 lambda,并且不会通过点在代码中。我正在使用 pandas 0.23.4,因为这是我需要使用的,并且代码在本地工作。任何的意见都将会有帮助

预期结果应该是将 csv 读入数据帧,以便我可以对其进行操作。

修复:不能只使用 '/tmp/' + 文件名。不得不使用 os.path.join(root, filename),由于文件大小,还不得不增加我的 lambda 超时。

标签: python-3.xpandasamazon-s3lambdaaws-lambda

解决方案


os.path.join - 适用于不同平台

利用

file_path = os.path.join(root, name)

接着

pd.read_csv(file_path)

注意:按照@Gabe Maurer 评论中的建议增加 AWS lambda 超时


推荐阅读