我需要在文本文件中获取短语的行号。这句话可能是:
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"
这不是作业,它是我正在进行的项目的一部分。我甚至不知道如何获得行号。
答案 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 line
比if 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
的人来说,这更难以阅读。)答案 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