【问题标题】:How to find files in multilevel subdirectories如何在多级子目录中查找文件
【发布时间】:2020-04-19 09:03:58
【问题描述】:

假设我有一个包含多个子目录的目录:

one_meter = r"C:\Projects\NED_1m"

one_meter 目录中,我想找到所有以'.xml' 结尾并包含字符串“_meta”的文件。我的问题是一些子目录的文件向下一级,而另一些则向下两级 例如:

one_meter > USGS_NED_one_meter_x19y329_LA_Jean_Lafitte_2013_IMG_2015 > USGS_NED_one_meter_x19y329_LA_Jean_Lafitte_2013_IMG_2015_meta.xml
one_meter > NY_Long_Island> USGS_NED_one_meter_x23y454_NY_LongIsland_Z18_2014_IMG_2015 > USGS_NED_one_meter_x23y454_NY_LongIsland_Z18_2014_IMG_2015_meta.xml

我想查看我的主目录 (one_meter') and find all of the_meta.xmlfiles (regardless of the subdirectory) and append them to a list (one_m_lister = []`)。 我尝试了以下方法,但没有产生任何结果。我做错了什么?

one_m_list = []
for filename in os.listdir(one_meter):
    if filename.endswith(".xml") and "_meta" in filename:
        print(filename)
        one_m_list.append(filename)

【问题讨论】:

    标签: python-3.x loops subdirectory listdir


    【解决方案1】:

    @JonathanDavidArndt 的答案很好,但已经过时了。从 Python 3.5 开始,您可以使用 pathlib.Path.glob 在任何子目录中搜索模式。

    例如:

    import pathlib
    
    destination_root = r"C:\Projects\NED_1m"
    pattern = "**/*_meta*.xml"
    
    master_list = list(pathlib.Path(destination_root).glob(pattern))
    

    【讨论】:

      【解决方案2】:

      你要找的函数是os.walk

      下面是一个简单且最小的工作示例。您应该能够修改它以满足您的需要:

      destination_root  = "C:\Projects\NED_1m"
      extension_to_find = ".xml"
      
      master_list = []
      extension_to_find_len = len(extension_to_find)
      for path,dir,files in os.walk(destination_root):
          for filename in files:
              # and of course, you can add extra filter criteria
              # such as "contains _meta" right in here
              if filename[-extension_to_find_len:] == extension_to_find:
                  print(os.path.join(path, filename))
                  master_list.append(os.path.join(path, filename))
      

      【讨论】:

      猜你喜欢
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 2012-07-12
      • 2016-02-23
      • 2013-11-13
      • 2011-02-21
      相关资源
      最近更新 更多