Получить индекс не алфавитно-цифровой строки в списке, содержащем не алфавитно-цифровые элементы в Python

У меня есть файл (test.txt), как это:

[06/Oct/2017:20:18:47 +0200] [pool-2-thread-7] http://10.12.214.20
[06/Oct/2017:20:19:38 +0200] [pool-2-thread-4] http://10.12.214.18
[06/Oct/2017:20:19:38 +0200] [pool-2-thread-4] http://10.12.214.18
[06/Oct/2017:20:19:49 +0200] [pool-2-thread-8] http://10.12.214.18
[06/Oct/2017:20:19:59 +0200] [pool-2-thread-7] ends.
[06/Oct/2017:20:20:47 +0200] [pool-2-thread-7] http://10.12.214.20
[06/Oct/2017:20:21:24 +0200] [pool-2-thread-4] ends.
[06/Oct/2017:20:21:34 +0200] [pool-2-thread-8] ends.

Будучи новичком в Python, я хотел получить номер конкретной строки, поэтому я искал решение и нашел этот пост: поиск индекса элемента по списку, содержащему его в Python. Я использую ответ @tanzil, потому что позже возможно, что я действительно ищу элементы, которых нет в списке.

Вот что я делаю:

Сохраните строки исходного файла в списке:

with open(test.txt) as f:
    content = [line.rstrip('\n') for line in f]
    print len(content)
index = [x for x in range(len(content))]

Переберите исходный файл:

with open(test.txt, "r") as file:
    for line in file:
        print find_element_in_list(index, line.rstrip('\n'))

Найдите индекс каждой строки исходного файла:

def find_element_in_list(index_list, list_element):
    try:
        index_element = index_list.index(list_element)
        return index_element
    except ValueError:
        return None

В результате совпадения нет вообще. Я получаю только "Нет" в качестве вывода.

Я читал этот пост , оператор "is" ведет себя по-разному при сравнении строк с пробелами и надеялся получить ответ на мой вопрос, но не смог адаптировать ответы к моей проблеме.

Я бы оценил любые намеки или идеи!

(Это не дубликат Get Line Number определенной фразы в файле Python, потому что мне нужно обращаться к индексам разных строк несколько раз. Я не перебираю файл каждый раз, когда мне нужна конкретная.)

2 ответа

Решение

Я думаю, что вы смотрите не в том списке. Вместо того чтобы смотреть в indexпопробуйте заглянуть в content

with open('test.txt', "r") as file:
    for line in file:
        print find_element_in_list(content, line.rstrip('\n'))

Чтобы получить номер строки, вы можете попробовать это:

file = open('filename.txt')
data = file.readlines()
target = "[06/Oct/2017:20:19:49 +0200] [pool-2-thread-8] http://10.12.214.18"
for i, item in enumerate(data, start=1):
    if item == target:
        print('Target is in line: ', str(i))
Другие вопросы по тегам