Office365-rest-python-client: incapaz de baixar o arquivo via get_file_by_server_relative_url

Criado em 21 mai. 2020  ·  4Comentários  ·  Fonte: vgrem/Office365-REST-Python-Client

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 ...')

question

Todos 4 comentários

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

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

liuliqiu picture liuliqiu  ·  7Comentários

laszloszolnoki picture laszloszolnoki  ·  4Comentários

Mark531 picture Mark531  ·  11Comentários

haimat picture haimat  ·  5Comentários

Cesaaar picture Cesaaar  ·  7Comentários