Python 3.x 将路径目录与字典进行比较,并从字典中检索密钥以查找匹配项
我有一个字典,其中键是数值,值是目录路径 我试图遍历一个文件夹(也有子文件夹),并为RDS表创建两列:1)文件名,2)该文件的文件夹路径数值(文件夹路径ID) 在尝试循环遍历文件夹及其子文件夹时,会得到重复的值。我认为,当存在子文件夹时,它会对每个子文件夹反复循环,我会得到文件及其关联文件夹路径ID的重复条目 这是响应['Content']的代码片段:Python 3.x 将路径目录与字典进行比较,并从字典中检索密钥以查找匹配项,python-3.x,Python 3.x,我有一个字典,其中键是数值,值是目录路径 我试图遍历一个文件夹(也有子文件夹),并为RDS表创建两列:1)文件名,2)该文件的文件夹路径数值(文件夹路径ID) 在尝试循环遍历文件夹及其子文件夹时,会得到重复的值。我认为,当存在子文件夹时,它会对每个子文件夹反复循环,我会得到文件及其关联文件夹路径ID的重复条目 这是响应['Content']的代码片段: {'ETag': '"0c7a50851d188f2d3b112a1f338b8c36"', 'Key': 'Repos/TEMPLATE/
{'ETag': '"0c7a50851d188f2d3b112a1f338b8c36"',
'Key': 'Repos/TEMPLATE/Name/IRB/8-Recruitment '
'Materials/path8.sh',
'LastModified': '2019-05-23T23:18:16+00:00',
'Owner': {'DisplayName': 'user001',
'ID': '024ea7e7ee4dee8da7a426dbc2105e8f577f476d676d229473d96e7a0e63d274'},
'Size': 50,
'StorageClass': 'STANDARD'},
{'ETag': '"0c7a50851d188f2d3b112a1f338b8c36"',
'Key': 'Repos/TEMPLATE/Name/Reg. 1/1-Memos to File/Old '
'Memos/path9.sh',
'LastModified': '2019-05-23T23:18:16+00:00',
'Owner': {'DisplayName': 'user001',
'ID': '024ea7e7ee4dee8da7a426dbc2105e8f577f476d676d229473d96e7a0e63d274'},
'Size': 50,
'StorageClass': 'STANDARD'},
{'ETag': '"0c7a50851d188f2d3b112a1f338b8c36"',
'Key': 'Repos/TEMPLATE/Group Name/Reg. 1/Misc/path18.sh',
'LastModified': '2019-05-23T23:18:16+00:00',
'Owner': {'DisplayName': 'user001',
'ID': '024ea7e7ee4dee8da7a426dbc2105e8f577f476d676d229473d96e7a0e63d274'}
目录是这样的字典:
13: 'Repos/TEMPLATE/Name/Reg. 1/1-Memos to File/Old',
14: 'Repos/TEMPLATE/Name/Reg. 1/1-Memos to File/Misc',
INSERT INTO document.Document(documentName,folderID,repositoryID,recCreatedByUserID)
VALUES("path19.sh",13,1,35);
s3 = boto3.resource('s3')
bucket = s3.Bucket('tes0001-2019052325451')
result = bucket.meta.client.list_objects(Bucket=bucket.name,
Delimiter="/*")
FolderA
|-FolderB
| |-File1
|-FolderC
| |-File2
|-FolderD
| |-File3
|-FolderE
| |-File4
输出应如下所示:
13: 'Repos/TEMPLATE/Name/Reg. 1/1-Memos to File/Old',
14: 'Repos/TEMPLATE/Name/Reg. 1/1-Memos to File/Misc',
INSERT INTO document.Document(documentName,folderID,repositoryID,recCreatedByUserID)
VALUES("path19.sh",13,1,35);
s3 = boto3.resource('s3')
bucket = s3.Bucket('tes0001-2019052325451')
result = bucket.meta.client.list_objects(Bucket=bucket.name,
Delimiter="/*")
FolderA
|-FolderB
| |-File1
|-FolderC
| |-File2
|-FolderD
| |-File3
|-FolderE
| |-File4
下面是我正在努力工作的代码。生成的值似乎是正确的,但如何消除重复的迭代
for file in response['Contents']:
for k,v in directories.items():
if os.path.dirname(file['Key']) in v:
print(
'INSERT INTO document.Document(documentName,folderID,repositoryID,recCreatedByUserID)',
"\n",
'VALUES("{}",{},1,{});'.format(os.path.basename(file['Key']),k,randint(1, 40)))
这与boto3结合使用,如下所示:
13: 'Repos/TEMPLATE/Name/Reg. 1/1-Memos to File/Old',
14: 'Repos/TEMPLATE/Name/Reg. 1/1-Memos to File/Misc',
INSERT INTO document.Document(documentName,folderID,repositoryID,recCreatedByUserID)
VALUES("path19.sh",13,1,35);
s3 = boto3.resource('s3')
bucket = s3.Bucket('tes0001-2019052325451')
result = bucket.meta.client.list_objects(Bucket=bucket.name,
Delimiter="/*")
FolderA
|-FolderB
| |-File1
|-FolderC
| |-File2
|-FolderD
| |-File3
|-FolderE
| |-File4
获取S3存储桶的内容。理论上,此代码应该适用于任何桶
问题摘要: 我已经能够将这种行为缩小到: 对于根文件夹中的每个子文件夹,python都在子文件夹-1中循环。如果有5个子文件夹,我将获得所有5个子文件夹的输出,然后是4个子文件夹的输出,然后是3、2、1 我的文件夹结构如下:
13: 'Repos/TEMPLATE/Name/Reg. 1/1-Memos to File/Old',
14: 'Repos/TEMPLATE/Name/Reg. 1/1-Memos to File/Misc',
INSERT INTO document.Document(documentName,folderID,repositoryID,recCreatedByUserID)
VALUES("path19.sh",13,1,35);
s3 = boto3.resource('s3')
bucket = s3.Bucket('tes0001-2019052325451')
result = bucket.meta.client.list_objects(Bucket=bucket.name,
Delimiter="/*")
FolderA
|-FolderB
| |-File1
|-FolderC
| |-File2
|-FolderD
| |-File3
|-FolderE
| |-File4
我得到以下输出:
A/B/1
A/C/2
A/D/3
A/E/4
A/C/2
A/D/3
A/E/4
A/D/3
A/E/4
A/E/4
不管一个文件夹中有多少子文件夹,我只需要循环浏览所有内容一次。在没有更多文件夹之前,不要在更少的文件夹上继续循环 请添加您当前的输出和所需的输出(不是文字,而是我们可以复制的格式),并添加
response['contents']
@Error syntactical懊悔我添加了更多内容。电流输出和期望输出相同,是正确的输出。唯一的问题是有额外的记录。我没有包括响应的全部内容,因为这将超过1000行代码。希望这是足够的信息。哪些记录是“额外”记录?抱歉,我只是想弄清楚什么是什么:P@Error-语法自责我添加了一个“问题摘要”,从高层次概述了我所看到的情况。我认为这只是FOR循环的一般问题。我对内容的循环次数超过了需要的次数。看起来,如果一个根文件夹中有5个子文件夹,我会在根文件夹中循环5次。如果子文件夹包含子文件夹,则此问题会更加复杂,以此类推。文件列表变得非常大,大部分内容都是冗余的。@错误语法自责非常感谢您的关注。我能够使用如下所述的os.walk方法:。复制示例并将“.”替换为根目录路径将生成文件夹结构中所有文件的列表,其路径如您所需。请添加您当前的输出和所需的输出(不是文字,而是我们可以复制的格式),并添加response['contents']的内容
@Error syntactical懊悔我添加了更多内容。电流输出和期望输出相同,是正确的输出。唯一的问题是有额外的记录。我没有包括响应的全部内容,因为这将超过1000行代码。希望这是足够的信息。哪些记录是“额外”记录?抱歉,我只是想弄清楚什么是什么:P@Error-语法自责我添加了一个“问题摘要”,从高层次概述了我所看到的情况。我认为这只是FOR循环的一般问题。我对内容的循环次数超过了需要的次数。看起来,如果一个根文件夹中有5个子文件夹,我会在根文件夹中循环5次。如果子文件夹包含子文件夹,则此问题会更加复杂,以此类推。文件列表变得非常大,大部分内容都是冗余的。@错误语法自责非常感谢您的关注。我能够使用如下所述的os.walk方法:。复制示例并将“.”替换为根目录路径将生成文件夹结构中所有文件的列表,这些文件的路径符合您的期望。