Bonjour @vgrem , le code suivant lève ValueError
.
...
web = client_context.web
client_context.load(web)
server_relative_url = f'/{folder_name}/{filename}'
logger.info(f'relative path: {server_relative_url}')
file = web.get_file_by_server_relative_url(server_relative_url)
return file.read()
Ce serait bien d'ajouter un message à cette erreur comme celui-ci
```
augmenter ValueError('vous avez fait ceci et cela mal...')
ajouter ceci avant que file.read()
résolve mon problème
client_context.load(file)
client_context.execute_query()
C'est vrai, ce sont les méthodes manquantes, la méthode File.read
s'attend à ce que les métadonnées du fichier (propriété ServerRelativeUrl
en particulier pour adresser correctement le fichier) soient récupérées avant que le fichier ne soit téléchargé :
client_context.load(file)
client_context.execute_query()
Comme il n'est peut-être pas très intuitif de télécharger le contenu d'un fichier, une autre méthode File.download
a été introduite, maintenant le fichier peut être téléchargé comme ceci :
with open(download_path, "wb") as local_file:
source_file = ctx.web.get_file_by_server_relative_url(file_url)
source_file.download(local_file)
ctx.execute_query()
Merci @vgrem , c'est une grande amélioration de la convivialité pour les nouveaux arrivants !
file.download fait-il partie de 2.1.7.post1 ?
le dernier de pip ne peut aller que loin
liste de pépins | grep -i bureau
Office365-REST-Python-Client 2.1.7.post1
2.1.8
pip install --upgrade Office365-REST-Python-Client==2.1.8
ERREUR : impossible de trouver une version qui satisfait à l'exigence Office365-REST-Python-Client==2.1.8 (à partir des versions : 1.0.0, 1.0.1, 1.1.0, 2.0.0, 2.1.1, 2.1.2 , 2.1.3, 2.1.4, 2.1.5, 2.1.6.post2, 2.1.7.post1)
ERREUR : aucune distribution correspondante trouvée pour Office365-REST-Python-Client==2.1.8
==== Contournement temporaire ====
importer le fichier temporaire
importer le système d'exploitation
download_path = os.path.join(tempfile.mkdtemp(), os.path.basename(location))
file_url = '/sites/Integration/Shared Documents/SomeFolder/somefile.csv'
download_path = os.path.join(tempfile.mkdtemp(), os.path.basename(file_url))
download_path
avec open(download_path, "wb") comme local_file :
source_file = ctx.web.get_file_by_server_relative_url(file_url)
fichier source
ctx.load(fichier_source)
ctx.execute_query()
r = fichier_source.read()
ctx.execute_query()
print("Données :", r)
fichier_local.write(r)
fichier_local.close()
print("[Ok] le fichier a été téléchargé : {0}".format(download_path))