[英]Encoding issue using pd.read_csv() to read csv file in S3 location
问题:我在尝试使用 pd.read_csv() 读取 S3 位置中的 CSV 文件时遇到编码错误。
下面是我的代码:
# parameters
s3_bucket = 'my_bucket'
s3_key = 'my_key'
# create s3 client
s3_client = boto3.client('s3')
# create s3 object
obj = s3_client.get_object(Bucket=s3_bucket, Key=s3_key)
# read csv file from s3
df = pd.read_csv(obj['Body'], encoding='cp1252')
但这是我得到的错误: “utf-8”编解码器无法解码位置 0 中的字节 0xff:无效起始字节
我不明白为什么在将编码指定为“cp1252”时会出现编码错误。 顺便说一句,'cp1252' 是我为我的 csv 文件找到的编码。
我查看了boto3 文档, get_object()
方法返回一个StreamBody
。 pandas 方法read_csv()
将路径、文件、缓冲区等作为输入( 文档)。
因此,我认为您必须先转换对象主体。 这可以通过 Python 的io
模块(文档)来完成。 以下代码应该可以解决您的问题:
obj = s3_client.get_object(Bucket=s3_bucket, Key=s3_key)
df = pd.read_csv(io.BytesIO(obj['Body'].read()))
说明: Pandas 在文档中声明:
通过类文件对象,我们指的是具有 read() 方法的对象,例如文件句柄(例如通过内置的 open 函数)或 StringIO。
这是通过将StreamBody
提供给StreamBody
来io.BytesIO
的,您可以从中读取文件的字节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.