Olá @vgrem , o código a seguir levanta 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()
Seria bom adicionar alguma mensagem a esse erro como esta
`` `
raise ValueError ('você fez isso e aquilo errado ...')
adicionar isso antes de file.read()
corrigir meu problema
client_context.load(file)
client_context.execute_query()
Isso mesmo, esses eram os métodos que faltavam, File.read
method espera que os metadados do arquivo (propriedade ServerRelativeUrl
em particular para endereçar adequadamente o arquivo) sejam recuperados antes que o arquivo seja baixado:
client_context.load(file)
client_context.execute_query()
Uma vez que pode não ser tão intuitivo baixar o conteúdo de um arquivo, outro método File.download
foi introduzido, agora o arquivo pode ser baixado assim:
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()
Obrigado @vgrem , esta é uma grande melhoria de usabilidade para os recém-chegados!
file.download faz parte do 2.1.7.post1?
o mais recente do pip só pode ir tão longe
lista de pip | grep -i office
Office365-REST-Python-Client 2.1.7.post1
2.1.8
pip install --upgrade Office365-REST-Python-Client == 2.1.8
ERRO: não foi possível encontrar uma versão que satisfaça o requisito Office365-REST-Python-Client == 2.1.8 (das versões: 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)
ERRO: Nenhuma distribuição correspondente encontrada para Office365-REST-Python-Client == 2.1.8
==== Solução temporária ====
importar arquivo temporário
importar 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_path
com aberto (download_path, "wb") como local_file:
source_file = ctx.web.get_file_by_server_relative_url (file_url)
arquivo fonte
ctx.load (source_file)
ctx.execute_query ()
r = source_file.read ()
ctx.execute_query ()
imprimir ("Dados:", r)
local_file.write (r)
local_file.close ()
print ("[Ok] arquivo foi baixado: {0}". format (download_path))