使用 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
语句。
在我的 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
语句。