Дать полный путь к переменной с частью имени пути? - PullRequest
0 голосов
/ 19 октября 2018

Это лучшая версия, включая то, что я сделал до сих пор:

Этот словарь: 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'

Я хочу назначить sh1 полный путь из sfiles, который соответствует.

Что я сделал:

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

Является ли этот подход правильным и как я могу сделать то же самое для sh2?

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

При for i in list(sfiles) i не является индексом списка, но уже назначен каждому из элементов по очереди, поэтому ваш цикл должен быть просто:

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

как я могу сделать то же самое эффективно для sh2?

Определить функцию, содержащую ваш цикл и передать sh1 или sh2 в качестве аргумента, например:

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

чтобы назначить sh1 полный путь из sfiles, который соответствует

sh1 = matching(sh1)
0 голосов
/ 19 октября 2018

вы на самом деле не используете свой словарь.Я предлагаю перестроить другой словарь с файлом name в качестве ключа (используя 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 извлекает данные

0 голосов
/ 19 октября 2018

Как я понимаю, вы хотите найти, какой путь имеет 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...