我有一个要求,我必须将所有文件从根文件夹,子文件夹和子文件夹的子目录递归下载到Nth。
我该怎么办? 有没有列出特定文件夹中的文件夹的方法? 另外,如何列出根文档库中的文件夹? @vgrem @Bachatero
得到了一个链接,该链接表示我们使用查询检索了整个文件夹和文件结构树。
该链接的第一个答案: https :
我正在尝试使用您的api从上面的链接复制此内容:/ _api / web / Lists / GetByTitle('Documents')/ Items?$ select = FileLeafRef,FileRef
但是当我尝试使用下面的代码:
folder = ctx.web.lists.get_by_title('Documents')
folder = folder.get_items('$select=FileLeafRef,FileRef')
它失败并显示错误:“'str'对象没有属性'payload'”
该怎么办?
你好,
您可以使用调用proc的方法,该方法以递归方式调用自身,例如:
def printAllContents(ctx,relativeUrl):
try:
libraryRoot = ctx.web.get_folder_by_server_relative_url(relativeUrl)
ctx.load(libraryRoot)
ctx.execute_query()
folders = libraryRoot.folders
ctx.load(folders)
ctx.execute_query()
for myfolder in folders:
print("Folder name: {0}".format(myfolder.properties["ServerRelativeUrl"]))
printAllContents(ctx, relativeUrl + '/' + myfolder.properties["Name"])
files = libraryRoot.files
ctx.load(files)
ctx.execute_query()
for myfile in files:
#print("File name: {0}".format(myfile.properties["Name"]))
print("File name: {0}".format(myfile.properties["ServerRelativeUrl"]))
except:
print('Problem printing out list of folders')
sys.exit(1)
米
...例如,您随后可以使用ServerRelativeUrl下载每个文件,该文件将被打印出来...
我在这里以更结构化的方式发布了我的查询。
仅供参考:JSON仅用于表示/理解目的。
我不确定你在说什么。 我认为我列出的示例只是这样的过程...递归列出了这些文件夹和子文件夹中的所有文件夹/子文件夹和文件...
以递归方式下载文件的示例...
outputDir = "d:\output"
def printAllContents(ctx, relativeUrl):
try:
libraryRoot = ctx.web.get_folder_by_server_relative_url(relativeUrl)
ctx.load(libraryRoot)
ctx.execute_query()
folders = libraryRoot.folders
ctx.load(folders)
ctx.execute_query()
for myfolder in folders:
#print("Folder name: {0}".format(myfolder.properties["Name"]))
print("Folder name: {0}".format(myfolder.properties["ServerRelativeUrl"]))
printAllContents(ctx, relativeUrl + '/' + myfolder.properties["Name"])
files = libraryRoot.files
ctx.load(files)
ctx.execute_query()
for myfile in files:
print("File name: {0}".format(myfile.properties["ServerRelativeUrl"]))
pathList = myfile.properties["ServerRelativeUrl"].split('/')
fileDest = outputDir + "/"+ pathList[-1]
downloadFile(ctx, fileDest, myfile.properties["ServerRelativeUrl"])
except:
print('Problem printing out list of folders')
sys.exit(1)
folder_list = []
def get_folder_relativeUrl(context, folder_relativeUrl):
libraryRoot = context.web.get_folder_by_server_relative_url(folder_relativeUrl)
folders = libraryRoot.folders
context.load(folders)
context.execute_query()
for cur_folder in folders:
folder_list.append(cur_folder.properties["ServerRelativeUrl"])
get_folder_relativeUrl(context, cur_folder.properties["ServerRelativeUrl"])
return folder_list
这种方式将为您提供包含上级文件夹和第N个子文件夹的平面列表。
但是,这在性能方面较慢。
问候,
既然已经回答了这个问题,我建议关闭它
最有用的评论
这种方式将为您提供包含上级文件夹和第N个子文件夹的平面列表。
但是,这在性能方面较慢。