Tôi có một tệp văn bản được lưu trên S3 là một bảng được phân cách bằng tab. Tôi muốn tải nó vào gấu trúc nhưng không thể lưu nó trước vì tôi đang chạy trên máy chủ heroku. Đây là những gì tôi có cho đến nay.
import io
import boto3
import os
import pandas as pd
os.environ["AWS_ACCESS_KEY_ID"] = "xxxxxxxx"
os.environ["AWS_SECRET_ACCESS_KEY"] = "xxxxxxxx"
s3_client = boto3.client('s3')
response = s3_client.get_object(Bucket="my_bucket",Key="filename.txt")
file = response["Body"]
pd.read_csv(file, header=14, delimiter="\t", low_memory=False)
lỗi là
OSError: Expected file path name or file-like object, got <class 'bytes'> type
Làm cách nào để chuyển đổi nội dung phản hồi thành định dạng mà gấu trúc sẽ chấp nhận?
pd.read_csv(io.StringIO(file), header=14, delimiter="\t", low_memory=False)
returns
TypeError: initial_value must be str or None, not StreamingBody
pd.read_csv(io.BytesIO(file), header=14, delimiter="\t", low_memory=False)
returns
TypeError: 'StreamingBody' does not support the buffer interface
CẬP NHẬT - Sử dụng điều sau đây đã hiệu quả
file = response["Body"].read()
và
pd.read_csv(io.BytesIO(file), header=14, delimiter="\t", low_memory=False)
io.BytesIO(file)
hoặcio.StringIO(file)
thay vìfile
trongread_csv()
cuộc gọi