J'ai un fichier texte enregistré sur S3 qui est un tableau délimité par des tabulations. Je veux le charger dans pandas mais je ne peux pas l'enregistrer d'abord parce que je fonctionne sur un serveur heroku. Voici ce que j'ai jusqu'à présent.
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'erreur est
OSError: Expected file path name or file-like object, got <class 'bytes'> type
Comment puis-je convertir le corps de la réponse dans un format que pandas acceptera ?
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
MISE À JOUR - L'utilisation de ce qui suit a fonctionné
file = response["Body"].read()
et
pd.read_csv(io.BytesIO(file), header=14, delimiter="\t", low_memory=False)
0 votes
Essayez de cette façon :
io.BytesIO(file)
ouio.StringIO(file)
au lieu defile
dans leread_csv()
appelez0 votes
Vous pourriez utiliser
io.StringIO
dans le cas de cette réponse .0 votes
Aucune de ces suggestions n'a fonctionné. Vous pouvez voir les erreurs dans mon post edit.
1 votes
La partie UPDATE a fonctionné pour moi. Merci.