【问题标题】:How to iterate through and store various images that live in various folders under a root directory in Python?如何遍历并存储存在于 Python 根目录下的各种文件夹中的各种图像?
【发布时间】:2021-12-24 12:18:09
【问题描述】:

我有 5 个文件夹 f1, f2, f3, f4, f5,每个文件夹中有几张图片。

我要做的是创建一个字典对象,该对象根据它们的key(这是文件夹名称)和它们的value(这是位于该特定文件夹下的文件名)保存所有图像。

我写这篇文章的方式是使用os.walk():

import os

dict_object = {}

for root, dirs, files in os.walk(".", topdown=False):
    for file_name in files:
        for dir_name in dirs:
            dict_object[dir_name] = [file_name]

但输出并不完全符合我的要求,因为它没有在适当的文件夹名称 (keys) 下列出文件名 (values):

dict_object

{'.DS_Store': [],
 'f1': ['.DS_Store'],
 '.ipynb_checkpoints': ['.DS_Store'],
 'f2': ['.DS_Store'],
 'f3': ['.DS_Store'],
 'f4': ['.DS_Store'],
 'f5': ['.DS_Store'],
 '.': ['.DS_Store']}

我也不想在字典中包含'.DS_Store': []'.': ['.DS_Store']

【问题讨论】:

    标签: python operating-system


    【解决方案1】:

    这就是我最终这样做的方式:

    # Define various folders
    folders = ["f1", "f2", "f3", "f4", "f5"]
    paths = []
    file_paths = {}
    
    # Put all paths together
    for folder in range(len(folders)):
        paths.append('parentfolder/'+folders[folder]+'/')
    
        temp_file_paths = [os.path.join(paths[folder], f) for f in os.listdir(paths[folder])]
    
        if paths[folder] + '.DS_Store' in temp_file_paths:
            temp_file_paths.remove(paths[folder] + '.DS_Store')
        file_paths[folders[folder]] = temp_file_paths
    

    .DS_Store:虽然它似乎是对文件夹的无用添加,但 .DS_Store 文件(“DS”代表“桌面服务”)对于帮助 Mac 确定打开文件夹时如何显示文件夹非常重要他们。阅读更多here

    【讨论】:

      【解决方案2】:

      你可以用一个简单的递归函数来完成想要的结果。 对于不需要的文件,您可以在函数调用后过滤字典或更改 if 语句。

      def recursive_read(path=".", dict_result={}):
          for root, dirs, files in os.walk(path, topdown=True):
              if (root == '.'):
                  continue
              if (root in dict_result):
                  dict_result[root].append(files)
              else:
                  dict_result[root] = files
      
              for dir in dirs:
                  recursive_read(os.path.join(root, dir))
          return dict_result
      

      【讨论】:

      • 感谢您发送此信息,但我之前尝试过。这仍然不能解决我的问题,因为字典中的 key 不仅仅是文件名,而是完整路径。此外,它并没有摆脱字典中的'.DS_Store': []'.': ['.DS_Store']
      • 关于我之前提到的不需要的文件,您可以过滤结果。而且对于键,您可以相应地对其进行格式化。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      相关资源
      最近更新 更多