Office365-rest-python-client: Datei kann nicht über get_file_by_server_relative_url heruntergeladen werden

Erstellt am 21. Mai 2020  ·  4Kommentare  ·  Quelle: vgrem/Office365-REST-Python-Client

Hallo @vgrem , der folgende Code löst 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()

Es wäre in Ordnung, diesem Fehler eine Nachricht wie diese hinzuzufügen
```
raise ValueError('du hast dies und das falsch gemacht...')

question

Alle 4 Kommentare

das hinzufügen bevor file.read() mein Problem behoben hat

client_context.load(file)
client_context.execute_query()

Das waren die fehlenden Methoden, die Methode File.read erwartet, dass Datei-Metadaten (insbesondere ServerRelativeUrl Eigenschaft, um die Datei richtig zu adressieren) abgerufen werden, bevor die Datei heruntergeladen wird:

client_context.load(file)  
client_context.execute_query()

Da es vielleicht nicht so intuitiv ist, einen Dateiinhalt herunterzuladen, wurde eine andere Methode File.download eingeführt, jetzt könnte die Datei wie folgt heruntergeladen werden:

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()

Danke @vgrem , das ist eine großartige Verbesserung der Benutzerfreundlichkeit für Neulinge!

file.download ist es Teil von 2.1.7.post1?

neuestes von pip kann nur so weit gehen
Pip-Liste | grep -i Büro
Office365-REST-Python-Client 2.1.7.post1

2.1.8
pip install --upgrade Office365-REST-Python-Client==2.1.8
FEHLER: Es konnte keine Version gefunden werden, die die Anforderung erfüllt Office365-REST-Python-Client==2.1.8 (ab Versionen: 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)
FEHLER: Keine passende Distribution gefunden für Office365-REST-Python-Client==2.1.8

==== Temporäre Problemumgehung ====

tempfile importieren
Importieren von OS
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_pfad
mit open(download_path, "wb") als local_file:
source_file = ctx.web.get_file_by_server_relative_url(file_url)
Quelldatei
ctx.load(Quelldatei)
ctx.execute_query()
r = source_file.read()
ctx.execute_query()
print("Daten:", r)
local_file.write(r)
local_file.close()
print("[Ok] Datei wurde heruntergeladen: {0}".format(download_path))

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen