为部分路径名的变量提供完整路径?

2024-09-24 22:31:30 发布

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

这是一个更好的版本,包括我到目前为止所做的:

这本词典: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'

以及

sh2
u'ASTIK'

我想将匹配的sfiles的完整路径分配给sh1。你知道吗

我所做的:

   for i in list(sfiles):
       if shape1 in os.path.basename(i):
            print((i))
            shape1 = i

这种方法正确吗?我怎样才能对sh2有效地执行同样的操作?你知道吗


Tags: in路径版本usersdesktopuserroads检查一下
3条回答

对于for i in list(sfiles)i不是列表的索引,而是已经依次分配给每个元素,因此循环必须是:

for i in list(sfiles):
    if shape1 in i.split('\\')[-1]:
        print(i)
        …

how can I do the same efficiently for the sh2?

定义一个包含循环的函数,并传递sh1sh2作为参数,例如:

def matching(shape):
    for i in list(sfiles):
        if shape in i.split('\\')[-1]:
            return i

to assign to sh1 the full path from the sfiles that matches

sh1 = matching(sh1)

据我所知,您希望找到在其最后一部分中有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)

你不是真的在用你的字典。我建议您重建另一个字典,将文件名作为键(使用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检索数据

相关问题 更多 >