我想创建一个与特定字符串匹配的所有 文件路径名称 的列表,例如" 04_DEM"所以我可以对这些目录中的文件进行进一步处理吗?
e.g。
INPUT
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"
答案 0 :(得分:2)
您可以使用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']
答案 1 :(得分:2)
使用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
确保使用/
或\\
作为目录分隔符而不是\
,因为后者会转义字符。
答案 2 :(得分:2)
首先,您使用re
通过正则表达式进行选择,然后使用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
更强大,因为将来可能需要构建更复杂的查询。