Например, у меня есть следующие строки в файле:
- Том - парень
- Сара - женщина
- Алекс тоже парень
Я бы хотел поискать "Сару", но хотел бы вернуть все как
def findLine(self, str):
...
Когда я вызываю findLine("Sara")
, он возвращает "2. Sara is a woman"
Как это сделать с помощью Python и Regular Expression (или другого метода нерегулярных выражений)
Я переименовал str
в content
см. Комментарий senderle
def findLine(self, content, search_str):
for line in content.splitlines()
if search_str in line:
return line
#or something else because the search_str was not found
return None
или если вам нужен список всех строк, содержащих сару
def findLine(self, str, search_str):
return [x for x in str.splitlines() if search_str in x]
search_str
- строка, которую вы хотите найти.
Для этого вам не нужен RegEx. Вы можете использовать file.readline() и проверить, содержит ли строка "Сара". Верните строку, если это произойдет. Используйте цикл for-each для проверки каждой строки в файле.
РЕДАКТИРОВАТЬ:
def findlines(filename, searchterm):
lines = []
line = filename.readline()
while line:
if searchterm in line:
lines.append(line)
line = filename.readline()
return lines
def findline(filename, search_string):
with open(filename, 'r') as infile:
for line in infile:
if search_string in line:
return line
else:
return None
'r'
ни оператор with
. GC Python закрывает файл
'r'
не имеет ничего общего с with
или GC. Он определяет, в каком режиме открывается файл. Режим всегда не обязателен; когда оно опущено, подразумевается 'r'
. Но явное лучше, чем неявное .
def find(name)
for line in open('file.txt'):
if name in line:
return line
In [6]: lines="""1. Tom is a guy
2. Sara is a woman
3. Alex is a guy too"""
In [10]: lines=lines.splitlines()
In [11]: def findLine(word):
....: return filter(lambda x: word in x,lines)
....:
In [12]: findLine("Alex")
Out[12]: ['3. Alex is a guy too']
Ну, вам не нужны регулярные выражения:
def findline(search_string, file_name, offset=0):
with open(file_name, 'r') as infile:
infile.seek(offset)
for line in infile
if search_string in line:
return line
(Вышеупомянутое на самом деле представляет собой просто комбинацию других с добавлением имени файла в качестве параметра функции и смещения, что означает, что теперь вы можете пересечь файл и получить множественные случаи искомой строки).