Python:如何在目录名(而不是单个文件名)中搜索特定的“字符串”

2024-10-01 02:22:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个列表,列出所有与特定字符串匹配的文件路径名,例如“04\u DEM”,以便对这些目录中的文件进行进一步处理?你知道吗

例如

输入

 C:\directory\NewZealand\04DEM\DEM_CD23_1232.tif
 C:\directory\Australia\04DEM\DEM_CD23_1233.tif
 C:\directory\NewZealand\05DSM\DSM_CD23_1232.tif
 C:\directory\Australia\05DSM\DSM_CD23_1232.tif

想要的产出

 C:\directory\NewZealand\04DEM\
 C:\directory\Australia\04DEM\

这确保只处理这些文件,因为目录中的其他一些文件的文件名中也包含相同的字符串“DEM”,我不想修改它。你知道吗

这是我的错误尝试,因为我是一个有Py代码的新手

 import os

 for dirnames in os.walk('D:\Canterbury_2017Copy'):
     print dirnames
     if dirnames=='04_DEM' > listofdirectoriestoprocess.txt

 print "DONE CHECK TEXT FILE"

Tags: 文件字符串目录列表osdirectory路径名print
3条回答

首先,使用re选择via regex,然后使用pathlib

import re
import pathlib
pattern = re.compile('04DEM')
# You use pattern.search() if s is IN the string
# You use pattern.match() if s COMPLETELY matches the string.
# Apply the correct function to your use case.
files = [s in list_of_files if pattern.search(s)]
all_pruned_paths = set()
for p in files:
    total = ""
    for d in pathlib.Path(p):
        total = os.path.join(total, d)
        if pattern.search(s):
            break
    all_pruned_paths.add(total)
result = list(all_pruned_paths)

这比使用in更健壮,因为将来可能需要形成更复杂的查询。你知道吗

使用in检查所需字符串是否在另一个字符串中。你知道吗

这是一个快速的方法:

new_list = []
for path in path_list:
    if '04DEM' in path:
        new_list.append(path)

演示:

s = 'C:/directory/NewZealand/04DEM/DEM_CD23_1232.tif'
if '04DEM' in s:
    print(True)
# True

确保使用/\\作为目录分隔符,而不是\,因为后者转义字符。你知道吗

您可以使用os.path来实现:

import os

lst = [r'C:\directory\NewZealand\04DEM\DEM_CD23_1232.tif',
       r'C:\directory\Australia\04DEM\DEM_CD23_1233.tif',
       r'C:\directory\NewZealand\05DSM\DSM_CD23_1232.tif',
       r'C:\directory\Australia\05DSM\DSM_CD23_1232.tif']

def filter_paths(lst, x):
    return [os.path.split(i)[0] for i in lst if os.path.normpath(i).split(os.sep)[3] == x]

res = list(filter_paths(lst, '04DEM'))

# ['C:\\directory\\NewZealand\\04DEM',
#  'C:\\directory\\Australia\\04DEM']

相关问题 更多 >