python - EmptyDataError:从 S3 存储桶读取多个 csv 文件到 pandas Dataframe 时,没有要从文件解析的列
问题描述
我有一个包含大约 500 个 csv 文件的源 s3 存储桶,我想将这些文件移动到另一个 s3 存储桶,并且在移动之前我想清理数据,所以我试图将其读取到 pandas 数据帧。我的代码工作正常并返回几个文件的数据帧,然后它突然中断并给我错误 " EmptyDataError: No columns to parse from file " 。
sts_client = boto3.client('sts', region_name='us-east-1')
client = boto3.client('s3')
bucket = 'source bucket'
folder_path = 'mypath'
def get_keys(bucket,folder_path):
keys = []
resp = client.list_objects(Bucket=bucket, Prefix=folder_path)
for obj in resp['Contents']:
keys.append(obj['Key'])
return keys
files = get_keys(bucket,folder_path)
print(files)
for file in files:
f = BytesIO()
client.download_fileobj(bucket, file, f)
f.seek(0)
obj = f.getvalue()
my_df = pd.read_csv(f ,header=None, escapechar='\\', encoding='utf-8', engine='python')
# files dont have column names, providing column names
my_df.columns = ['col1', 'col2','col3','col4','col5']
print(my_df.head())
提前致谢!
解决方案
您的文件大小为零。代替 os.path.getsize(file) 使用分页器检查如下:
import boto3
client = boto3.client('s3', region_name='us-west-2')
paginator = client.get_paginator('list_objects')
page_iterator = paginator.paginate(Bucket='my-bucket')
filtered_iterator = page_iterator.search("Contents[?Size > `0`][]")
for key_data in filtered_iterator:
print(key_data)
推荐阅读
- sql - 如果条件,sqlite 创建值为 1 的列
- python - 矩形在显示 PyGame 上不移动
- linux - WSL:如果使用符号链接,则无法在 Windows 资源管理器中查看文件夹(显示为文件),但如果符号链接在同一目录上则有效
- .htaccess - 如何在 htaccess 中将 url index.html 重写为 /home
- java - 如何将 Edn 字符串转换为 Json
- python - 如果安装的模块不正确,如何导入模块?
- amazon-web-services - AWS API Gateway 密钥问题
- regex - 选择周期但不选择带小数点的元素
- flutter - 如何在 Flutter 中保存 TextFormField 中的 int 数据
- c# - 如何在 aspx 页表中的 c#asp.net 中从 Firebase 实时数据库中检索所有数据?