0

我有一个像这样的文件(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' 运算符在将字符串与空格进行比较时表现不同,并希望得到我的问题的答案,但无法根据我的问题调整答案。

我会感谢任何提示或想法!

(这不是在文件 Python 中获取特定短语的行号的重复项,因为我需要多次访问不同行的索引。我不会在每次需要特定行时遍历文件。)

4

2 回答 2

1

我认为您正在查看错误的列表。与其查看index,不如尝试查看content

with open('test.txt', "r") as file:
    for line in file:
        print find_element_in_list(content, line.rstrip('\n'))
于 2017-10-27T13:58:27.733 回答
0

要获取行号,您可以尝试以下操作:

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))
于 2017-10-27T13:43:22.507 回答