Office365-rest-python-client: невозможно загрузить файл через get_file_by_server_relative_url

Созданный на 21 мая 2020  ·  4Комментарии  ·  Источник: vgrem/Office365-REST-Python-Client

Привет @vgrem , следующий код вызывает 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()

Было бы хорошо добавить к этой ошибке какое-нибудь сообщение, подобное этому
`` ''
Raise ValueError ('вы сделали то и то неправильно ...')

question

Все 4 Комментарий

добавление этого до того, как file.read() исправило мою проблему

client_context.load(file)
client_context.execute_query()

Правильно, это были отсутствующие методы, метод File.read ожидает, что метаданные файла (свойство ServerRelativeUrl в частности, для правильной адресации файла) будут получены до загрузки файла:

client_context.load(file)  
client_context.execute_query()

Поскольку загрузка содержимого файла может оказаться не самой интуитивно понятной, был введен другой метод File.download , теперь файл можно загрузить следующим образом:

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

Спасибо @vgrem , это отличное улучшение юзабилити для новичков!

file.download это часть 2.1.7.post1?

последнее от пипса может зайти так далеко
список пунктов | grep -i офис
Office365-REST-Python-клиент 2.1.7.post1

2.1.8
pip install --upgrade Office365-REST-Python-Client == 2.1.8
ОШИБКА: не удалось найти версию, удовлетворяющую требованию Office365-REST-Python-Client == 2.1.8 (из версий: 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)
ОШИБКА: не найдено подходящего распределения для Office365-REST-Python-Client == 2.1.8

==== Временное решение проблемы ====

импортировать временный файл
импорт ОС
download_path = os.path.join (tempfile.mkdtemp (), os.path.basename (расположение))
file_url = '/ сайты / Интеграция / Общие документы / SomeFolder / somefile.csv'
download_path = os.path.join (tempfile.mkdtemp (), os.path.basename (file_url))
download_path
с open (download_path, "wb") как local_file:
исходный_файл = ctx.web.get_file_by_server_relative_url (file_url)
исходный файл
ctx.load (исходный_файл)
ctx.execute_query ()
r = исходный_файл.read ()
ctx.execute_query ()
print ("Данные:", r)
local_file.write (г)
local_file.close ()
print ("[Ок] файл загружен: {0}". формат (путь_загрузки))

Была ли эта страница полезной?
0 / 5 - 0 рейтинги