Python 是否为包含部分路径名的变量提供完整路径?
这是一个更好的版本,包括我迄今为止所做的工作: 本词典:Python 是否为包含部分路径名的变量提供完整路径?,python,loops,dictionary,Python,Loops,Dictionary,这是一个更好的版本,包括我迄今为止所做的工作: 本词典:sfiles {'C:\\Users\\user\\Desktop\\05052\\ASTTOM\\ASTTOM': [], 'C:\\Users\\user\\Desktop\\05052\\ASTIK\\ASTIK': [], 'C:\\Users\\user\\Desktop\\05052\\ROADS\\ROADS': []} 我想检查sh1是否在其中: sh1 u'ASTTOM' 及 我想将sfiles中匹配的完整路径分配
sfiles
{'C:\\Users\\user\\Desktop\\05052\\ASTTOM\\ASTTOM': [],
'C:\\Users\\user\\Desktop\\05052\\ASTIK\\ASTIK': [],
'C:\\Users\\user\\Desktop\\05052\\ROADS\\ROADS': []}
我想检查sh1
是否在其中:
sh1
u'ASTTOM'
及
我想将sfiles
中匹配的完整路径分配给sh1
我所做的:
for i in list(sfiles):
if shape1 in os.path.basename(i):
print((i))
shape1 = i
这种方法正确吗?我如何才能有效地对sh2执行同样的操作?据我所知,您希望找到sh1(称为shape1)在其最后部分的路径。 所以,你可以这样做:
sfiles = {'C:\\Users\\user\\Desktop\\05052\\ASTTOM\\ASTTOM': [],
'C:\\Users\\user\\Desktop\\05052\\ASTIK\\ASTIK': [],
'C:\\Users\\user\\Desktop\\05052\\ROADS\\ROADS': []
}
for pth in sfiles.keys():
if shape1 in pth.split("\\")[-1]:
print(pth)
对于列表中的i(sfiles),i
不是列表的索引,而是已依次分配给每个元素,因此循环必须是:
for i in list(sfiles):
if shape1 in i.split('\\')[-1]:
print(i)
…
我怎样才能对sh2有效地执行同样的操作
定义一个包含循环的函数,并传递sh1
或sh2
作为参数,e。g、 :
def matching(shape):
for i in list(sfiles):
if shape in i.split('\\')[-1]:
return i
将匹配的sfiles的完整路径分配给sh1
你不是真的在用你的字典。我建议您重建另一个以文件名为键的字典(使用
os.path.basename
,而不是str.split
),将完整路径和列表保留为一个值元组
import os
data = {'C:\\Users\\user\\Desktop\\05052\\ASTTOM\\ASTTOM': [],
'C:\\Users\\user\\Desktop\\05052\\ASTIK\\ASTIK': [],
'C:\\Users\\user\\Desktop\\05052\\ROADS\\ROADS': []}
new_data = {os.path.basename(path): (path,value) for path,value in data.items()}
它看起来是什么样子:
>>> new_data
{'ASTIK': ('C:\\Users\\user\\Desktop\\05052\\ASTIK\\ASTIK', []),
'ASTTOM': ('C:\\Users\\user\\Desktop\\05052\\ASTTOM\\ASTTOM', []),
'ROADS': ('C:\\Users\\user\\Desktop\\05052\\ROADS\\ROADS', [])}
然后您可以进行O(1)
查找和测试:
shape1 = "ASTIK"
print(shape1 in new_data,new_data.get(shape1))
印刷品:
True ('C:\\Users\\user\\Desktop\\05052\\ASTIK\\ASTIK', [])
(因为值在字典中,
get
检索数据您可以使用os.path.basename
而不是拆分。在字典的键中查找子字符串不是一种非常有效的方法。创建一个以basename为键的字典,并使用完整路径(如果需要)+列表。然后查找是即时的。你能建议一种方法来执行sh1和sh2检查并分配完整路径吗?可能是zip?你能详细说明如何执行sh1和sh2部分吗?@user10528055-我修改了答案。你认为在列表(sfiles)中使用for I,j的zip可以吗?@user10528055-我们无法解压缩列表(sfiles)
为变量分成两个。您参考问题中代码的前一个版本,可能是因为它现在似乎正在工作。传递列表(数据)使它只访问应该访问的键,对吗?
shape1 = "ASTIK"
print(shape1 in new_data,new_data.get(shape1))
True ('C:\\Users\\user\\Desktop\\05052\\ASTIK\\ASTIK', [])