ฉันมีไฟล์ข้อความที่บันทึกไว้ใน S3 ซึ่งเป็นตารางที่คั่นด้วยแท็บ ฉันต้องการโหลดเป็นแพนด้า แต่ไม่สามารถบันทึกได้ก่อนเนื่องจากฉันใช้งานบนเซิร์ฟเวอร์ heroku นี่คือสิ่งที่ฉันมีจนถึงตอนนี้
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)
ข้อผิดพลาดคือ
OSError: Expected file path name or file-like object, got <class 'bytes'> type
ฉันจะแปลงร่างตอบสนองเป็นแพนด้ารูปแบบจะยอมรับได้อย่างไร
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
UPDATE - การใช้งานต่อไปนี้ได้ผล
file = response["Body"].read()
และ
pd.read_csv(io.BytesIO(file), header=14, delimiter="\t", low_memory=False)
io.BytesIO(file)
หรือio.StringIO(file)
แทนfile
ในread_csv()
การโทร