Python-从文本fi中查找行号

2024-09-30 20:27:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个代码,它将在文本文件中查找,并查看输入是否在其中。

例如

我输入“pizza”

我的文本文件包含:

bread
pizza
pasta
tomato

我想找到一种方法打印单词pizza所在的行号。有什么帮助吗?


Tags: 方法代码单词文本文件行号pizzapastatomato
3条回答

实现这一点有两种方法:

  1. 将整个文件存储在内存中,以便只读取一次
  2. 每次搜索时都会读取文件,但不必存储

对于方法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
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代表x in range(len(content))]只填充所有索引值,而'if'pizza'在content[x].lower()'中保留与字符串匹配的行。

像这样的?

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

相关问题 更多 >