Как найти индекс элемента списка, сравнивая его со строкой в ​​Python? - PullRequest
1 голос
/ 21 ноября 2019

Предположим, если бы у меня был список, содержащий несколько файлов, например:

file_list = ['folder\\text.txt', 'folder\\data.csv', 'folder\\picture.png']

А также объявил строку:

file = 'text.txt'  #Did not include 'folder\\', intentionally.

Как я могу получить индексиз file_list, используя переменную 'file'?

Я пробовал следующее:

index = file_list.index(file)
filename = file_list[index]
print(filename)

Однако я получаю этот результат:

ValueError: 'text.txt' is not in list

Я понял, почему мое решение не удалось, но есть ли эффективное решение для захвата индекса с помощью строковой переменной?

Ответы [ 3 ]

0 голосов
/ 21 ноября 2019

, если вы не хотите использовать os модуль (как вы сказали в комментарии), просто реализуйте базовый basename функционал, основанный на разбиении.

тогда вы можете использовать простое пониманиесоздать соответствующий список только с именами файлов и найти в нем индекс.

def basename(path):
  return path.split('\\')[-1]

file_list = ['folder\\text.txt', 'folder\\data.csv', 'folder\\picture.png']
file = 'text.txt'

file_basename_list = [basename(f) for f in file_list]

index = file_basename_list.index(file)

filename = file_list[index]
print(filename)

Вывод:

folder\text.txt
0 голосов
/ 21 ноября 2019

Простой способ сделать это:

file_list = ['folder\\text.txt', 'folder\\data.csv', 'folder\\picture.png']
search_file = 'text.txt'
base_path = "folder\\"

def find_file(file_list, search_file, base_path):
    for idx, file in enumerate(file_list):
        if file == base_path+search_file:
            return idx
    return "File Not Found"

print(find_file(file_list, search_file, base_path))

Если вы хотите добавить base_path динамически, используйте:

import os.path 

path = 'folder\\'
base_path = os.path.basename(path)
0 голосов
/ 21 ноября 2019

Это вам поможет:)

file_list = ['folder\\text.txt', 'folder\\data.csv', 'folder\\picture.png']
file = 'data.csv'
flag = True
for i in range(len(file_list)):
    if(file_list[i].find(file)!=-1):
        print("file found at {} position in the list".format(i))
        flag = False
        break
if flag:
    print ("File not found :(")

ВЫХОД:

file found at 0 position in the list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...