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', [])