ルートフォルダー、サブフォルダー、およびサブフォルダーのサブからN番目にすべてのファイルを再帰的にダウンロードする必要があるという要件があります。
どうすればそれについて行くことができますか? 特定のフォルダ内のフォルダを一覧表示する方法はありますか? また、ルートドキュメントライブラリ内のフォルダを一覧表示するにはどうすればよいですか? @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)
m。
...次に、たとえば、印刷されるServerRelativeUrlを使用して各ファイルをダウンロードできます...
私はここにクエリを投稿し
参考:JSONは、表現/理解を目的としたものです。
何をしているのかわかりません。 私が例として挙げたprocは、それを実行していると思います...これらのフォルダーとサブフォルダー内のすべてのフォルダー/サブフォルダーとファイルを再帰的にリストします...
ツリーを再帰的に下るときにファイルをダウンロードする例...
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番目のサブフォルダーが含まれます。
ただし、これはパフォーマンスの点で遅くなります。