AWS Wrangler读取指定S3文件列表报错求助
解决建议
1. 核对文件路径的准确性
- 确认生成的目标文件路径是完整的S3 URI格式(例如
s3://br-candles/br4.csv),手动拼接时容易遗漏s3://前缀,或者桶名、文件名拼写/大小写出错(S3路径区分大小写)。 - 先打印要读取的文件路径列表(比如
print(target_files)),和S3控制台里的实际文件路径做对比,确认完全一致。
2. 验证目标文件是否真实存在
- 直接在AWS S3控制台搜索报错的路径(
s3://br-candles/br4.csv),确认文件没有被误删、路径是否正确。 - 检查排序逻辑是否符合预期:如果是按文件名排序,可能因命名规则问题导致顺序错误(比如
br10.csv会排在br2.csv前面),建议改用文件的LastModified时间排序,更贴合“最新文件”的需求。
3. 调整wr.s3.read_csv的调用方式
- 读取指定文件时,必须传入字符串列表格式的路径,即使只有单个文件也要用列表包裹,示例:
target_files = ["s3://br-candles/br4.csv", "s3://br-candles/br1.csv"] df = wr.s3.read_csv(target_files) - 不要使用通配符(比如
s3://br-candles/*.csv),直接传入精确的文件路径列表。
4. 排查权限与日志
- 虽然之前读整个桶正常,但可以确认Lambda的IAM角色是否有
s3:GetObject权限(桶级权限通常已覆盖,但需排除桶策略的特殊限制)。 - 在代码中添加异常捕获,打印详细错误信息,方便定位问题:
import traceback try: df = wr.s3.read_csv(target_files) except Exception as e: print(f"读取文件失败: {str(e)}") print(traceback.format_exc())
5. 修正文件列表的获取与排序逻辑
- 确保获取的文件列表包含所有预期的CSV文件,比如用boto3获取时过滤后缀:
import boto3 s3 = boto3.client('s3') response = s3.list_objects_v2(Bucket='br-candles') # 过滤出CSV文件 csv_files = [obj for obj in response['Contents'] if obj['Key'].endswith('.csv')] # 按最后修改时间降序排序,取最新和倒数第4个 sorted_files = sorted(csv_files, key=lambda x: x['LastModified'], reverse=True) target_uris = [f"s3://br-candles/{obj['Key']}" for obj in [sorted_files[0], sorted_files[3]]]
内容的提问来源于stack exchange,提问作者bob
相关产品推荐
相关产品推荐

