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

时间:2017-01-02 16:05:27

标签: python numbers line

我正在编写一个查看文本文件的代码,并查看输入是否在那里。

e.g。

我输入"披萨"

我的文本文件包含:

bread
pizza
pasta
tomato

我想找到一种方法来打印披萨所在的行号。有什么帮助吗?

4 个答案:

答案 0 :(得分:4)

有两种方法可以实现这一目标:

  1. 将整个文件存储在内存中,以便只读一次
  2. 在每次搜索时阅读文件,但不必存储
  3. 对于方法1,首先读取每一行,然后获取该单词所在的索引:

    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
    

答案 1 :(得分:3)

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

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

代码的第(1)部分将每一行作为变量" content"中的单独列表读取。

第(2)部分仅在“披萨”中填写内容行#。存在于那一行。 [x for x in range(len(content))]只是填充所有索引值,而如果' pizza'在内容[x] .lower()'保留与字符串匹配的行#。

答案 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将包含与输入模式匹配的所有行索引。

答案 3 :(得分:0)

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