J'ai une configuration de notification SNS qui déclenche une fonction Lambda lorsqu'un fichier .xlsx est téléchargé dans le compartiment S3.
La fonction lambda lit le fichier .xlsx dans Pandas DataFrame.
Invalid file path or buffer object type: <type 'dict'>: ValueError Traceback (most recent call last): File "/var/task/handler.py", line 26, in main df = pd.read_excel(obj, header=2) File "/var/task/pandas/util/_decorators.py", line 178, in wrapper return func(*args, **kwargs) File "/var/task/pandas/util/_decorators.py", line 178, in wrapper return func(*args, **kwargs) File "/var/task/pandas/io/excel.py", line 307, in read_excel io = ExcelFile(io, engine=engine) File "/var/task/pandas/io/excel.py", line 376, in __init__ io, _, _, _ = get_filepath_or_buffer(self._io) File "/var/task/pandas/io/common.py", line 218, in get_filepath_or_buffer raise ValueError(msg.format(_type=type(filepath_or_buffer))) ValueError: Invalid file path or buffer object type: <type 'dict'>
3 Réponses :
C'est parfaitement normal! obj est un dictionnaire, avez-vous essayé?
df = pd.read_excel(obj['body'], header=2)
C'était ça. df = pd.read_excel (obj ['corps'], en-tête = 2). Il manque la fermeture de votre message] pour "corps". Merci pour l'aide.
Mon plaisir :) P.S: J'ai ajouté le]
Si obj
est un dictionnaire, vous pouvez essayer
df = pd.DataFrame.from_dict(obj)
Documentation ici si vous avez besoin de changer les paramètres.
Pandas prend désormais en charge l'URL s3 comme chemin de fichier afin de pouvoir lire le fichier Excel directement à partir de s3 sans le télécharger au préalable.
Voir ici un exemple CSV - https://stackoverflow.com/a/51777553/52954 p >