如何在多级子目录中查找文件
How to find files in multilevel subdirectories
假设我有一个包含多个子目录的目录:
one_meter = r"C:\Projects\NED_1m"
在目录 one_meter
中,我想找到所有以“.xml”结尾并包含字符串“_meta”的文件。我的问题是某些子目录的文件向下一级,而其他子目录的文件向下 2 级
例如:
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)
您要查找的函数是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))
@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))
假设我有一个包含多个子目录的目录:
one_meter = r"C:\Projects\NED_1m"
在目录 one_meter
中,我想找到所有以“.xml”结尾并包含字符串“_meta”的文件。我的问题是某些子目录的文件向下一级,而其他子目录的文件向下 2 级
例如:
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)
您要查找的函数是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))
@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))