如何在Python中执行bash命令获取S3桶最新文件并使用pandas读取
实现方案
前置注意事项
如果你的S3桶未挂载到本地文件系统,不能直接用本地ls命令,需要先安装AWS CLI,将筛选命令替换为S3专用的查询命令:aws s3 ls s3://test-bucket/folder1/subd1/datafiles/ --recursive | sort | tail -n 1 | awk '{print $4}'
如果已经完成S3挂载到本地对应目录,直接使用你原有ls -t a1*|head -1命令即可。
核心实现代码
Python中执行shell命令并捕获输出推荐使用subprocess标准库,无需安装第三方依赖,示例如下:
import subprocess import pandas as pd import os # 切换到S3挂载后的目标目录,使用aws cli命令的场景可省略这步 os.chdir("/你挂载S3后对应的本地目录路径/s3/test-bucket/folder1/subd1/datafiles/") # 执行shell命令捕获输出 # 未挂载S3的场景把下方单引号内的命令替换为上文提到的aws s3 ls相关命令 result = subprocess.run( 'ls -t a1*|head -1', shell=True, capture_output=True, text=True ) # 提取文件名,strip()用于去除命令输出末尾的换行符 latest_file = result.stdout.strip() # 校验结果合法性 if not latest_file: raise Exception("未找到匹配的文件,请检查路径或命令是否正确") # 读取文件,未挂载S3的场景需要拼接完整S3路径,例如f"s3://test-bucket/folder1/subd1/datafiles/{latest_file}" df = pd.read_csv(latest_file)
参数说明
shell=True:允许执行带管道的复合shell命令capture_output=True:捕获命令的标准输出、错误输出到返回结果中text=True:指定输出为字符串格式,无需额外做字节转码
内容的提问来源于stack exchange,提问作者1--
相关产品推荐
相关产品推荐

