使用 lambda 和 boto3 从 S3 存储桶中读取 csv 文件的子集

Reading a subset of csv files from S3 bucket using lambda and boto3

在我的 s3 存储桶中,我有大约 30 个 csv 文件,分为 3 类。对于我的 lambda,我有兴趣只挑选其中的 8 个属于类别 1。 我使用了下一个问题的回答:Reading multiple csv files from S3 bucket with boto3

所以我制定了下一个代码:

def read_prefix_to_df(prefix,s3_resource,bucket_name):
    bucket = s3_resource.Bucket(bucket_name)
    prefix_objs = bucket.objects.filter(Prefix=prefix)
    prefix_df = []
    for obj in prefix_objs:
        key = obj.key
        body = obj.get()['Body'].read()
        df = pd.DataFrame(body)
        prefix_df.append(df)
    return prefix_df

其中:

bucket_name='my_bucket'
prefix='folder/data_overview_*.csv'

这 8 个文件的名称几乎相同,只是最后的日期不同,这就是为什么我使用 * 来选择与 data_overview_ 相关的所有文件的原因 不幸的是,返回的数据框是空的,我要更改前缀吗?

前缀不能包含通配符。

你应该使用:

prefix = 'folder/data_overview_`

如果您需要进一步限制为仅 CSV 文件,则需要在 Python 代码中使用 if 语句。