将路径目录与字典进行比较,并从字典中检索键以进行匹配

时间:2019-05-24 13:48:03

标签: python-3.x

我有一个字典,其中的键值是数字,值的目录路径是。

我试图遍历一个文件夹(也有子文件夹)并为RDS表创建两列:1)文件名,2)该文件的文件夹路径的数值(文件夹路径ID)

当尝试遍历foler及其子文件夹时,我得到重复的值。我认为,当有子文件夹时,它会为每个子文件夹一遍又一遍地循环,我会得到文件及其关联文件夹路径ID的重复条目。

这是用于响应['Content']的代码段:

{'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'}

DIRECTORIES是这样的字典:

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);

下面是我要开始工作的代码。生成的值似乎是正确的,但是如何摆脱重复的迭代?

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结合使用,如下所示:

s3 = boto3.resource('s3')
bucket = s3.Bucket('tes0001-2019052325451')
result = bucket.meta.client.list_objects(Bucket=bucket.name,
                                     Delimiter="/*")

获取S3存储桶的内容。从理论上讲,此代码应适用于任何存储桶。


问题摘要: 我已经能够将行为范围缩小到:

对于根文件夹中的每个子文件夹,python遍历子文件夹-1。如果有5个子文件夹,我将得到所有5个子文件夹的输出,然后是4个子文件夹的输出,然后是3、2、1。

我有这样的文件夹结构:

  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

无论一个文件夹中有多少个子文件夹,我都只需要遍历所有内容一次。在没有更多文件夹之前,不要一直在较少的文件夹上循环播放。

0 个答案:

没有答案