Python - 从文本文件中查找行号

8

我正在编写代码,查看文本文件中是否存在输入内容。

例如:

我输入“披萨”

我的文本文件包含:

bread
pizza
pasta
tomato

有没有办法打印出单词“pizza”所在的行号?

1
开始阅读 教程 并练习例子,很快你就会开始有创意了 - 尝试在 shell 中尝试一些想法以找出哪些可行、哪些不行,浏览 内置 函数 的文档,看看是否有可以帮助你解决问题的内容。 - wwii
4个回答

6

有两种方法可以实现这个:

  1. 将整个文件存储在内存中,这样只需读取一次
  2. 每次搜索时读取整个文件,但不需要存储它

对于第一种方法,首先读取每一行,然后获取单词所在的索引:

with open('path.txt') as f: data = f.readlines()
line_no = data.index("pizza")

或者,通过文件查找索引:

with open('path.txt') as f:
    for line_no, line in enumerate(f):
        if line == "pizza":
            break
    else: # for loop ended => line not found
        line_no = -1

6
with open('test.txt') as f:
    content = f.readlines()

index = [x for x in range(len(content)) if 'pizza' in content[x].lower()]

代码的第一部分将每行作为单独的列表读入到变量“content”中。

第二部分仅在某行存在“pizza”时才填充内容的行号。[x for x in range(len(content))]只是填充所有索引值,而“if 'pizza' in content[x].lower()”则保留与字符串匹配的行号。


请您能否提供一些解释? - Ivan Chernykh
我要打印什么来给我行号呢?行号是哪个变量? - googlecoolcat
感谢您的帮助,这对我非常有帮助。 - googlecoolcat
我无法使用数字,因为它在方括号内。例如,我无法执行 1 + 'index'。有什么解决办法吗? - googlecoolcat
1+index[0] - 这是一个列表,所以你需要进行索引。 - Oxymoron88
显示剩余2条评论

1
像这样的内容:
import re
import os # You can go without is if you have other means to get your filepath

i = 1
matches = []
target = raw_input("Please type string to match\n")
with open(os.getenv("SOME_PATH") + "/myfile.txt") as fic: # open("myfile.txt") if in your current directory
     for line in fic:
         if re.search(target, line):
             print "Found at line {}".format(i)
             matches.append(i)
         i = i +1
if not len(matches):
    raise Exception, "target not found"

通过这样做,您可以输入一个正则表达式并使其工作(例如,如果您输入“p.zza”或“^p.*”,它将起作用)。列表matches将包含与输入模式匹配的所有行的索引。

-1
print next (i for i,v in enumerate (open (fname),1) if v == needle)

之后你不想关闭文件吗? - Rory Daulton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接