python-3.x - 如何在 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 超时。
解决方案
os.path.join - 适用于不同平台
利用
file_path = os.path.join(root, name)
接着
pd.read_csv(file_path)
注意:按照@Gabe Maurer 评论中的建议增加 AWS lambda 超时