Ответ 1
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
Мне нужно получить номер строки фразы в текстовом файле. Фраза может быть:
the dog barked
Мне нужно открыть файл, найти его для этой фразы и напечатать номер строки.
Я использую Python 2.6 в Windows XP
Это то, что у меня есть:
o = open("C:/file.txt")
j = o.read()
if "the dog barked" in j:
print "Found It"
else:
print "Couldn't Find It"
Это не домашнее задание, это часть проекта, над которым я работаю. Я даже не знаю, как получить номер строки.
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
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 года спустя (увидев, что он получил еще один взлет): я оставляю это как есть; но если бы я писал сегодня, то писал бы что-то поближе к решению 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
для открытия файлов - это питоническая идиома - это гарантирует, что файл будет правильно закрыт, когда блок, использующий файл, закончится.for line in f
намного лучше, чем for line in f.readlines()
. Первый является pythonic (например, будет работать, если f
является любым общим итерабельным, не обязательно файловым объектом, который реализует readlines
), а более эффективный f.readlines()
создает список со всем файлом в памяти и затем выполняет итерацию через него, * if search_phrase in line
более pythonic, чем if line.find(search_phrase) >= 0
, так как он не требует 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
.)Смотрите код, например pythonista
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
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)
Откройте файл, а затем сделайте что-то вроде...
for line in f:
nlines += 1
if (line.find(phrase) >= 0):
print "Its here.", nlines
Существует множество способов чтения строк из файлов в Python, но метод for line in f
более эффективен, чем большинство.
listStr = open("file_name","mode")
if "search element" in listStr:
print listStr.index("search element") # This will gives you the line number
for n,line in enumerate(open("file")):
if "pattern" in line: print n+1
Вот что я нашел для работы:
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])