所以我有一个名为“ABC”的 shaprepoint 网站。下面是其中存储文件的文件结构:
|-Folder1
| |--file_1_1.docx
| |--file_1_2.docx
|
|-Folder2
| |--file_2_1.docx
|
|-file_x.docx
现在我想将文件下载到我的本地计算机。我听说我可以使用“Office365-REST-Python-Client”库来做到这一点。我在互联网上浏览了不同的代码,但没有找到任何具体的解决方案。下面的代码为我提供了有关所有文件夹的信息,但不提供有关文件的信息。
client_id = "XXXXX"
client_secret = "YYYY"
site_url = "https://tenantName.sharepoint.com/sites/ABC"
relative_url = "Documents"
def connectAuth():
# Initialize the client credentials
client_credentials = ClientCredential(client_id, client_secret)
# create client context object
ctx = ClientContext(site_url).with_credentials(client_credentials)
try:
libraryRoot = ctx.web.get_folder_by_server_relative_path(relative_url)
libraryRoot.expand(["Files","Folders"]).get().execute_query()
folder = libraryRoot.folders
print(folder)
print("Number of folders:", len(folder))
print("Folder names:")
for folder_item in folder:
ctx.load(folder_item)
ctx.execute_query()
print(folder_item.properties["Name"])
except Exception:
traceback.print_exc()
print('Problem printing out library contents')
#sys.exit(1)
connectAuth()
您能帮我下载这些文件夹中以及这些文件夹外的文件吗?我的意思是我希望将文件 file_1_1.docx、file_1_2.docx、file_2_1.docx 和 file_x.docx 下载到我的本地计算机。
所以,我得到了答案,这不是一种有效的方法,但只是完成工作。
def downlaod_file_from_folder(folder_url, site_url, client_id, client_secret, local_file_path):
client_credentials = ClientCredential(client_id, client_secret)
ctx = ClientContext(site_url).with_credentials(client_credentials)
try:
folderName = ctx.web.get_folder_by_server_relative_path(folder_url)
ctx.load(folderName)
ctx.execute_query()
files = folderName.files
ctx.load(files)
ctx.execute_query()
for file_item in files:
ctx.load(file_item)
ctx.execute_query()
fileName = file_item.properties["Name"]
file_url = file_item.properties["ServerRelativeUrl"]
final_file_path = local_file_path + "//" + fileName
with open(final_file_path, "wb") as local_file:
file = ctx.web.get_file_by_server_relative_url(file_url)
file.download(local_file)
ctx.execute_query()
print(f"File {fileName} downloaded successfully")
except Exception as e:
return {"Error": str(e)}
def downloadFiles(relative_url, site_url, client_id, client_secret, local_file_path):
client_credentials = ClientCredential(client_id, client_secret)
cctx = ClientContext(site_url).with_credentials(client_credentials)
try:
libraryRoot = cctx.web.get_folder_by_server_relative_path(relative_url)
libraryRoot.expand(["Files","Folders"]).get().execute_query()
folders = libraryRoot.folders
files = libraryRoot.files
if len(files) > 0:
folder_url = relative_url
downlaod_file_from_folder(folder_url, site_url, client_id, client_secret, local_file_path)
if len(folders) > 0:
for folder_item in folders:
cctx.load(folder_item)
cctx.execute_query()
if folder_item.properties["Name"] =="Forms":
pass
else:
folder_url = relative_url + "/" + str(folder_item.properties["Name"])
downloadFiles(folder_url, site_url, client_id, client_secret, local_file_path)
else:
pass
return{"Success": "Files Downloaded Successfully"}
except Exception as e:
return {"error":str(e)}