Office365-rest-python-client: Bagaimana cara mengambil nama file (dengan ekstensi)?

Dibuat pada 17 Jun 2020  ·  4Komentar  ·  Sumber: vgrem/Office365-REST-Python-Client

Selamat siang,

Saya telah mengerjakan loop rekursif yang memungkinkan saya menemukan beberapa item di perpustakaan dan mengunduhnya.

Sejauh ini saya sudah bisa mendapatkan semua elemen tetapi saya tidak dapat mengunduhnya karena di properti elemen bidang "Nama" tidak muncul.

Saat saya mengonversi elemen menjadi file, propertinya adalah null ({}) jadi saya tidak bisa mendapatkan namanya.

Karena file.dowload() methot memerlukan file dan saya tidak tahu ekstensi file saat ini, sangat tidak mungkin untuk mengunduh file.

Ada saran?

Kode yang saya gunakan adalah sebagai berikut:

from office365.runtime.auth.ClientCredential import ClientCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.file import File
from office365.sharepoint.camlQuery import CamlQuery

ctx = ClientContext.connect_with_credentials(site_url, ClientCredential(client_id, client_secret))
lib = ctx.web.lists.get_by_title("XXX")
caml_query = CamlQuery()
caml_query.ViewXml = """XXX"""

items = lib.get_items(caml_query)
ctx.load(lib)
ctx.execute_query()
for item in items:
    file = item.file
    with open(download_path, "wb") as local_file:
        file.download(local_file)
        ctx.execute_query()
        print("[Ok] file has been downloaded: {0}".format(download_path))

Terima kasih sebelumnya!

question

Komentar yang paling membantu

Selamat pagi,

Saya mampu memecahkan masalah saya.

Setelah iter di dalam daftar item, Anda perlu memanggil konteks untuk setiap file, itu akan mengambil properti file yang menyertakan nama, kemudian Anda dapat mengunduh file.

Ini kode saya di bawah ini:

client_id = "XXX"
client_secret = "XXX"
site_url = "XXX"
download_folder = r'C:\Users\yourname\sharepoint'


from office365.runtime.auth.ClientCredential import ClientCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.file import File
from office365.sharepoint.camlQuery import CamlQuery


ctx = ClientContext.connect_with_credentials(site_url, ClientCredential(client_id, client_secret))
lib = ctx.web.lists.get_by_title("REO")
caml_query = CamlQuery()
caml_query.ViewXml = XXX
items = lib.get_items(caml_query)
ctx.load(items)
ctx.execute_query()
for item in items:
    file = item.file
    ctx.load(file)
    ctx.execute_query()
    file_name = "{0}".format(file.properties["Name"])
    download_path = download_folder + '//' + file_name
    with open(download_path, "wb") as local_file:
        file.download(local_file)
        ctx.execute_query()
        print("[Ok] file has been downloaded: {0}".format(download_path))

Semua 4 komentar

Selamat pagi,

Saya mampu memecahkan masalah saya.

Setelah iter di dalam daftar item, Anda perlu memanggil konteks untuk setiap file, itu akan mengambil properti file yang menyertakan nama, kemudian Anda dapat mengunduh file.

Ini kode saya di bawah ini:

client_id = "XXX"
client_secret = "XXX"
site_url = "XXX"
download_folder = r'C:\Users\yourname\sharepoint'


from office365.runtime.auth.ClientCredential import ClientCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.file import File
from office365.sharepoint.camlQuery import CamlQuery


ctx = ClientContext.connect_with_credentials(site_url, ClientCredential(client_id, client_secret))
lib = ctx.web.lists.get_by_title("REO")
caml_query = CamlQuery()
caml_query.ViewXml = XXX
items = lib.get_items(caml_query)
ctx.load(items)
ctx.execute_query()
for item in items:
    file = item.file
    ctx.load(file)
    ctx.execute_query()
    file_name = "{0}".format(file.properties["Name"])
    download_path = download_folder + '//' + file_name
    with open(download_path, "wb") as local_file:
        file.download(local_file)
        ctx.execute_query()
        print("[Ok] file has been downloaded: {0}".format(download_path))

@ pobs93 Saya mencoba menggunakan kode sumber Anda untuk mengunduh lampiran dari daftar Sharepoint.
Saya mengomentari baris ini di sini karena saya tidak tahu parameter apa yang digunakan untuk itu:
caml_query.ViewXml = XXX
Tetapi ketika saya menjalankan kode saya mendapatkan kesalahan di bawah ini pada baris ctx.execute_query()
TypeError: Objek bertipe CamlQuery tidak dapat serial JSON

Saya baru mengenal jenis API ini, jadi saya ingin tahu apakah Anda bisa mengklarifikasi.
TKS

@ pobs93 Hanya untuk menambahkan beberapa penjelasan tentang daftar yang saya coba unduh lampirannya.
Itu adalah kunci DEFAULT dari daftar yang saya miliki dan saya tidak melihat URL lampiran di sini, tetapi ada di sana (lihat gambar terlampir).
{'FileSystemObjectType': -,
'Indo': -,
'ServerRedirectedEmbedUri': Tidak ada,
'ServerRedirectedEmbedUrl': '',
'ContentTypeId': -,
'Judul': -,
'ComplianceAssetId': Tidak ada,
'INDO': -,
'Diubah': -,
'Dibuat': -,
'Id Penulis': 12,
'Id Editor': 12,
'OData__UIVersionString': '1.0',
'Lampiran': Benar,
'PANDUAN': -}

sp_attachment

Contoh berikut menunjukkan cara mengambil _file name_ dan _file url_ untuk item daftar:


ctx = ClientContext(settings['url']).with_credentials(client_creds)

lib = ctx.web.lists.get_by_title("Documents")
items = lib.items
ctx.load(items, ["ID", "FileLeafRef", "FileRef"])

ctx.execute_query()
for item in items:
    print(f"FileRef: {item.properties['FileRef']}") 

di mana

  • FileLeafRef - Mengidentifikasi bidang yang berisi informasi tentang URL relatif server untuk node file yang terkait dengan ListItem

  • FileRef - Mengidentifikasi bidang yang berisi informasi tentang URL relatif server untuk ListItem

Apakah halaman ini membantu?
0 / 5 - 0 peringkat