获取文件Python中某些短语的行号

时间:2010-10-18 16:41:28

标签: python file

我需要在文本文件中获取短语的行号。这句话可能是:

the dog barked

我需要打开该文件,搜索该短语并打印行号。

我在Windows XP上使用Python 2.6


这就是我所拥有的:

o = open("C:/file.txt")
j = o.read()
if "the dog barked" in j:
     print "Found It"
else:
     print "Couldn't Find It"

这不是作业,它是我正在进行的项目的一部分。我甚至不知道如何获得行号。

9 个答案:

答案 0 :(得分:84)

lookup = 'the dog barked'

with open(filename) as myFile:
    for num, line in enumerate(myFile, 1):
        if lookup in line:
            print 'found at line:', num

答案 1 :(得分:7)

f = open('some_file.txt','r')
line_num = 0
search_phrase = "the dog barked"
for line in f.readlines():
    line_num += 1
    if line.find(search_phrase) >= 0:
        print line_num

编辑1。5年后(看到它得到另一个upvote):我将原样离开;但如果我今天写的话会写一些更接近Ash / suzanshakya的解决方案:

def line_num_for_phrase_in_file(phrase='the dog barked', filename='file.txt')
    with open(filename,'r') as f:
        for (i, line) in enumerate(f):
            if phrase in line:
                return i
    return -1
  • 使用with打开文件是pythonic习惯用法 - 它确保在使用文件的块结束时文件将正确关闭。
  • 使用for line in f迭代文件比for line in f.readlines()好得多。前者是pythonic(例如,如果f是任何通用可迭代的,则可以工作;不一定是实现readlines的文件对象),更高效的f.readlines()创建一个包含整个文件的列表记忆然后迭代它。 * if search_phrase in lineif line.find(search_phrase) >= 0更加pythonic,因为它不需要line来实现find,更容易阅读以查看其意图,并且不容易搞砸(例如,if line.find(search_phrase)if line.find(search_phrase) > 0两者都不适用于所有情况,因为find返回第一个匹配的索引或-1)。
  • enumerate中的迭代项包装成for i, line in enumerate(f)更简单/更清晰,而不是在循环之前初始化line_num = 0,然后在循环中手动递增。 (虽然可以说,对于不熟悉enumerate的人来说,这更难以阅读。)

请参阅code like pythonista

答案 2 :(得分:5)

def get_line_number(phrase, file_name):
    with open(file_name) as f:
        for i, line in enumerate(f, 1):
            if phrase in line:
                return i

答案 3 :(得分:2)

suzanshakya,我实际上是修改你的代码,我认为这会简化代码,但是在运行代码之前确保文件必须位于控制台的同一目录中,否则你会收到错误。

lookup="The_String_You're_Searching"
file_name = open("file.txt")
for num, line in enumerate(file_name,1):
        if lookup in line:
            print(num)

答案 4 :(得分:1)

打开您的文件,然后执行类似......

的操作
for line in f:
    nlines += 1
    if (line.find(phrase) >= 0):
        print "Its here.", nlines

有许多方法可以从Python中的文件中读取行,但for line in f技术比大多数技术更有效。

答案 5 :(得分:1)

listStr = open("file_name","mode")

if "search element" in listStr:
    print listStr.index("search element")  # This will gives you the line number

答案 6 :(得分:0)

for n,line in enumerate(open("file")):
    if "pattern" in line: print n+1

答案 7 :(得分:0)

以下是我发现的工作原因:

f_rd = open(path, 'r')
file_lines = f_rd.readlines()
f_rd.close()

matches = [line for line in file_lines if "chars of Interest" in line]
index = file_lines.index(matches[0])

答案 8 :(得分:0)

您可以使用列表理解:

memory_limit = -1