Получить индекс не алфавитно-цифровой строки в списке, содержащем не алфавитно-цифровые элементы в 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))