Office365-rest-python-client: no se puede descargar el archivo a través de get_file_by_server_relative_url

Creado en 21 may. 2020  ·  4Comentarios  ·  Fuente: vgrem/Office365-REST-Python-Client

Hola @vgrem , el siguiente código genera 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()

Estaría bien agregar algún mensaje a ese error como este
''
subir ValueError ('hiciste esto y aquello mal ...')

question

Todos 4 comentarios

agregando esto antes de file.read() solucionó mi problema

client_context.load(file)
client_context.execute_query()

Así es, esos eran los métodos que faltaban, el método File.read espera que se recuperen los metadatos del archivo (propiedad ServerRelativeUrl en particular para abordar correctamente el archivo) antes de que se descargue el archivo:

client_context.load(file)  
client_context.execute_query()

Como puede que no sea tan intuitivo descargar el contenido de un archivo, se ha introducido otro método File.download , ahora el archivo podría descargarse así:

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

Gracias @vgrem , ¡esta es una gran mejora de usabilidad para los recién llegados!

file.download ¿es parte de 2.1.7.post1?

lo último de pip solo puede llegar tan lejos
lista de pips | grep -i oficina
Office365-REST-Python-Client 2.1.7.post1

2.1.8
pip install --upgrade Office365-REST-Python-Client == 2.1.8
ERROR: No se pudo encontrar una versión que cumpla con el requisito Office365-REST-Python-Client == 2.1.8 (de las versiones: 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)
ERROR: No se encontró una distribución coincidente para Office365-REST-Python-Client == 2.1.8

==== Solución temporal ====

importar archivo temporal
importar sistema operativo
download_path = os.path.join (tempfile.mkdtemp (), os.path.basename (ubicación))
file_url = '/ sitios / Integración / Documentos compartidos / SomeFolder / somefile.csv'
download_path = os.path.join (tempfile.mkdtemp (), os.path.basename (file_url))
download_path
con open (download_path, "wb") como local_file:
archivo_origen = ctx.web.get_file_by_server_relative_url (file_url)
archivo fuente
ctx.load (archivo_origen)
ctx.execute_query ()
r = archivo_origen.read ()
ctx.execute_query ()
imprimir ("Datos:", r)
local_file.write (r)
local_file.close ()
print ("El archivo [Ok] se ha descargado: {0}". formato (download_path))

¿Fue útil esta página
0 / 5 - 0 calificaciones