Найти файл и найти точное совпадение и строку печати?

Я поискал повсюду, но не смог найти ни одного сообщения, которое помогло бы мне решить эту проблему, я нашел подобное, но я все равно не смог найти ничего, что могло бы решить эту проблему.

проблема, которая у меня есть, я пытаюсь заставить скрипт python искать текстовый файл, текстовый файл имеет числа в списке, и каждый номер соответствует строке текста, и если raw_input соответствует точному номеру в текстовом файле, который он печатает всю эту строку текста. пока он печатает любую строку, содержащую число.

Пример проблемы, пользователь вводит 20 , тогда на выходе получается все, что содержит 2 и 0 , поэтому я получаю 220 foo 200 bar и т. Д. Как я могу это исправить так что просто найдите «20»

вот код, который у меня есть

  num = raw_input ("Type Number:") search = open (  "file.txt") для строки в поиске: если число в строке: строка печати  

Спасибо.


Создание списков совпадающих строк — несколько вариантов:

  def lines_that_equal (line_to_match, fp): return [строка для строки в fp, если строка == line_to_match] def lines_that_contain (string, fp): return [строка для строки в fp, если строка в  строка] def lines_that_start_with (строка, fp): return [строка для строки в fp, если line.startswith (строка)] def lines_that_end_with (string, fp): return [строка для строки в fp, если line.endswith (строка)]  

Построить генератор совпадающих строк (эффективная память):

  def generate_lines_that_equal (string, fp  ): для строки в fp: if line == string: yield line  

Распечатать все совпадающие строки (сначала найти все совпадения, затем распечатать их):

  с open ("file.txt", "r") как fp: для строки в lines_that_equal ("my_string", fp): print line   

Распечатать все совпадающие строки (распечатать их лениво, когда мы их найдем)

  с open ("file.txt", "r") как fp: for line in generate_lines_that_equal ("my_string", fp): print line  

Генераторы (, созданные yield ) — ваши друзья, особенно с большими файлами, которые не помещаются в память.


Чтобы проверить точное совпадение, вы должны использовать число == строка . Но в line есть символ конца строки n или r n , которого не будет в num , поскольку raw_input удаляет завершающую новую строку. Поэтому может быть удобно удалить все пробелы в конце line с помощью

  line = line.rstrip ()  

  с open ("file.txt") в качестве поиска: для строки в поиске: line = line. rstrip () # удалить ' n' в конце строки, если num == line: print (line)  

2


вы должны использовать регулярные выражения, чтобы найти все, что вам нужно:

  import  rep = re.compile (r '( d +)') # шаблон для числа для строки в файле: if num in p.findall (line): print line  

regular выражение вернет вам все числа в строке в виде списка, например:

 >>> re.compile (r '( d +)'). findall ('123kh234hi56h9234hj29kjh290  ') [' 123 ',' 234 ',' 56 ',' 9234 ',' 29 ',' 290 ']  

, чтобы вы не соответствовали’ 200 ‘или ‘220’ вместо ’20’.

0


Это очень просто:

  numb = raw_input ('Input Line:') fiIn = open ('file.txt'). readlines () для строк в fiIn: if numb == lines [0  ]: линии печати  


  num = raw_input ("Номер типа:"  ) search = open ("file.txt", "r") для строки в search.readlines (): для цифры в num: # Проверить, есть ли в строке какие-либо цифры, указанные пользователем.  если цифра в строке: продолжить строку  

1


Проверка должна быть такой:

  if num == line.split () [0]:  

If file .txt имеет следующий макет:

  1 foo20 bar30 20  

Мы разделили "1 foo " в ['1', 'foo'] и просто используйте первый элемент, который является числом.



Как извлечь определенные части текстового файла с помощью Python

Извлечение текста из файла — обычная задача при написании сценариев и программировании, и Python упрощает ее. В этом руководстве мы обсудим несколько простых способов извлечения текста из файла с помощью языка программирования Python 3.

Убедитесь, что вы используете Python 3

В этом руководстве мы будем использовать Python версии 3. В большинстве систем предварительно установлен Python 2.7. В то время как Python 2.7 используется в устаревшем коде, Python 3 — это настоящее и будущее языка Python. Если у вас нет особой причины писать или поддерживать Python 2, мы рекомендуем работать с Python 3.

Для Microsoft Windows Python 3 можно загрузить с официального сайта Python.. При установке убедитесь, что установлены флажки «Установить средство запуска для всех пользователей» и «Добавить Python в PATH», как показано на изображении ниже.

В Linux вы можете установить Python 3 с помощью диспетчера пакетов. Например, в Debian или Ubuntu вы можете установить его с помощью следующей команды:

 sudo apt-get update && sudo apt-get install python3 

Для macOS: установщик Python 3 можно загрузить с python.org, как указано выше. Если вы используете диспетчер пакетов Homebrew, его также можно установить, открыв окно терминала ( Приложения Утилиты ) и выполнив следующую команду:

 brew install python3 

Запуск Python

В Linux и macOS команда для запуска интерпретатора Python 3 — python3 . В Windows, если вы установили программу запуска, используйте команду py . Команды на этой странице используют python3 ; если вы работаете в Windows, замените py на python3 во всех командах.

Запуск Python без параметров запускает интерактивный устный переводчик. Для получения дополнительной информации об использовании интерпретатора см. Обзор Python: использование интерпретатора Python. Если вы случайно вошли в интерпретатор, вы можете выйти из него с помощью команды exit () или quit () .

Запуск Python с именем файла интерпретирует эту программу Python. Например:

 python3 program.py 

… запускает программу, содержащуюся в файле program.py .

Хорошо, как мы можем использовать Python для извлечения текста из текстового файла?

Чтение данных из текстового файла

Сначала давайте прочитаем текстовый файл. Предположим, мы работаем с файлом с именем lorem.txt , который содержит строки из текста примера Lorem Ipsum.

 Lorem ipsum dolor sit amet, Conctetur adipiscing  elit.Nunc fringilla arcu congue metus aliquam mollis.Mauris nec maximus purus.  Меценаты сидят amet pretium tellus.Quisque at dignissim lacus. 
Примечание

Во всех следующих примерах мы работаем с четырьмя строками текста, содержащимися в этом файле. Скопируйте и вставьте приведенный выше латинский текст в текстовый файл и сохраните его как lorem.txt , чтобы вы могли запустить пример кода, используя этот файл в качестве входных.

Программа Python может читать текстовый файл с помощью встроенной функции open () . Например, программа Python 3 ниже открывает lorem.txt для чтения в текстовом режиме, считывает содержимое в строковую переменную с именем contents , закрывает файл, и распечатывает данные.

 myfile = open ("lorem.txt", "rt") # открыть lorem.txt для чтения textcontents = myfile.read () # прочитать весь файл в stringmyfile.  close () # закрыть файл print (contents) # print string contents 

Здесь myfile — это имя, которое мы даем нашему файловому объекту.

Параметр « rt » в функции open () означает, что «мы открываем этот файл в r ead t ext data «

Знак решетки (» # «) означает, что все в этой строке находится комментарий, который интерпретатор Python игнорирует.

Если вы сохраните эту программу в файле с именем read.py , вы можете запустить ее с помощью следующей команды.

 python3 read.py 

Приведенная выше команда выводит содержимое lorem.txt :

 Lorem ipsum dolor sit amet, consctetur adipiscing elit.Nunc fringilla arcu congue metus aliquam mollis.Mauris nec maximus purus.  Меценаты сидят amet pretium tellus.Quisque at dignissim lacus. 

Использование «with open»

Важно как можно скорее закрыть открытые файлы: откройте файл, выполните операцию и закройте ее. Не оставляйте его открытым на длительное время.

Когда вы работаете с файлами, рекомендуется использовать составной оператор with open … as. Это самый чистый способ открыть файл, работать с ним и закрыть файл — все в одном легко читаемом блоке кода. Файл автоматически закрывается, когда блок кода завершается.

Используя с open as , мы можем переписать наш программа должна выглядеть так:

 with open ('lorem.txt', 'rt') as myfile: # Открыть lorem.txt для чтения текста contents = myfile.read () # Прочитать весь  файл в строкуprint (contents) # Распечатать строку 
Примечание

Отступы важны в Python. Программы Python используют пробел в начале строки для определения области, например блока кода. Мы рекомендуем использовать четыре пробела на каждый уровень отступа и использовать пробелы вместо табуляции. В следующих примерах убедитесь, что ваш код имеет именно такой отступ, как он представлен здесь.

Пример

Сохраните программу как read .py и выполните его:

 python3 read.py 

Вывод:

 Lorem ipsum dolor sit amet, Conctetur  adipiscing elit.Nunc fringilla arcu congue metus aliquam mollis.Mauris nec maximus purus.  Меценаты сидят amet pretium tellus.Quisque at dignissim lacus. 

Построчное чтение текстовых файлов

В примерах до сих пор мы читали в весь файл сразу. Чтение полного файла не составляет большого труда для небольших файлов, но, вообще говоря, это не лучшая идея. Во-первых, если размер вашего файла превышает объем доступной памяти, вы столкнетесь с ошибкой.

Почти в каждом случае лучше читать текстовый файл по одной строке за время.

В Python файловый объект является итератором. Итератор — это тип объекта Python, который ведет себя определенным образом при многократном использовании. Например, вы можете использовать цикл for для многократной работы с файловым объектом, и каждый раз, когда выполняется одна и та же операция, вы получите другой, или «следующий», результат..

Пример

Для текстовых файлов объект файла выполняет итерацию по одной строке текста за раз. Он считает одну строку текста «единицей» данных, поэтому мы можем использовать оператор цикла for … in для итерации по одной строке за раз:

 с open ('lorem.txt'  , 'rt') как myfile: # Откройте lorem.txt для чтения myline в myfile: # Для каждой строки, считайте строку, print (myline) # и распечатайте строку. 

Вывод :

 Lorem ipsum dolor sit amet, consctetur adipiscing elit.Nunc fringilla arcu congue metus aliquam mollis.Mauris nec maximus purus.  Меценаты сидят amet pretium tellus.Quisque at dignissim lacus. 

Обратите внимание, что мы получаем дополнительный разрыв строки («новую строку») после каждой строки. Это потому, что печатаются два символа новой строки. Первый — это новая строка в конце каждой строки нашего текстового файла. Вторая новая строка происходит потому, что по умолчанию print () добавляет собственный разрыв строки в конец того, что вы просили напечатать.

Давайте сохраним наши строки текста в переменной — в частности, переменная list , чтобы мы могли рассмотреть ее более внимательно.

Сохранение текстовых данных в переменной

В Python , списки похожи, но не идентичны массивам в C или Java. Список Python содержит индексированные данные разной длины и типов.

Пример

 mylines = [] # Объявить пустой список с именем mylines.with open ('lorem.  txt ',' rt ') как myfile: # Откройте lorem.txt для чтения текстовых данных.  для myline в myfile: # Для каждой строки, хранящейся как myline, mylines.append (myline) # добавьте ее содержимое в mylines.print (mylines) # Распечатайте список. 

Результат этой программы немного отличается. Вместо того, чтобы печатать содержимое списка, эта программа печатает наш объект списка, который выглядит так:

Вывод:

 ['Lorem ipsum dolor sit amet, conctetur adipiscing elit.  n', 'Nunc fringilla arcu congue metus aliquam mollis.  n', 'Mauris nec maximus purus.  Maecenas sit amet pretium tellus.  N ',' Quisque at dignissim lacus.  N '] 

Здесь мы видим исходное содержимое списка. В необработанной объектной форме список представлен в виде списка, разделенного запятыми. Здесь каждый элемент представлен в виде строки, а каждая новая строка представлена ​​как последовательность управляющих символов n .

Во многом как массив C или Java, Доступ к элементам списка осуществляется путем указания номера индекса после имени переменной в скобках. Номера индексов начинаются с нуля — другими словами, n -й элемент списка имеет числовой индекс n -1.

Примечание

Если вам интересно, почему номера индексов начинаются с нуля, а не с единицы, вы не одиноки. В прошлом компьютерные специалисты обсуждали полезность систем нумерации с нулевым отсчетом. В 1982 году Эдсгер Дейкстра высказал свое мнение по этому поводу, объяснив, почему нумерация с отсчетом от нуля является лучшим способом индексирования данных в информатике.. Вы можете сами прочитать служебную записку — он приводит убедительные аргументы.

Пример

Мы можем вывести первый элемент из строк указав номер индекса 0 , заключенный в скобки после имени списка:

 print (mylines [0]) 

Результат:

 Lorem ipsum dolor sit amet, conctetur adipiscing elit.  Nunc fringilla arcu congue metus aliquam mollis. 

Пример

Или третья строка, указав номер индекса 2:

 print (mylines  [2]) 

Вывод:

 Quisque at dignissim lacus. 

Но если мы попытаемся получить доступ к индексу, для которого есть нет значения, получаем ошибку:

Пример

 print (mylines [3]) 

Вывод:

 Traceback (последний вызов последним): файл , строка , в  print (mylines [3]) IndexError: индекс списка вне диапазона 

Пример

Объект списка является итератором, поэтому для печати каждого элемента списка мы можем перебирать его с помощью для в :

 mylines = [] # Объявить пустой список с open ('lorem.txt', 'rt') как myfile: # Открыть lorem.txt для чтения текста.  for line в myfile: # Для каждой строки текста mylines.append (line) # добавить эту строку в список.  for element in mylines: # Для каждого элемента в списке print (element) # распечатайте его. 

Вывод:

 Lorem ipsum dolor sit amet, conctetur adipiscing elit  .Nunc fringilla arcu congue metus aliquam mollis. Mauris nec maximus purus.  Меценат сидит amet pretium tellus.Quisque at dignissim lacus. 

Но мы по-прежнему получаем дополнительные символы новой строки. Каждая строка нашего текстового файла заканчивается символом новой строки (‘ n ‘), который печатается. Кроме того, после печати каждой строки print () добавляет собственную новую строку, если вы не укажете иное.

Мы можем изменить это поведение по умолчанию, указав параметр end в нашем вызове print () :

 print (element, end = '') 

Установив для end пустую строку (две одинарные кавычки, без пробелов), мы сообщаем print () напечатать ничего в конце строки вместо символа новой строки.

Пример

Наша исправленная программа выглядит так:

 mylines = [] # Объявить пустой список с open ('lorem.txt', 'rt') как myfile: # Открыть файл lorem.txt для строки в myfile: # Для каждой строки текста mylines.  append (line) # добавляем эту строку в список.  for element in mylines: # Для каждого элемента в списке print (element , end = '' ) # распечатайте его без лишних символов новой строки. 

Вывод:

 Lorem ipsum dolor sit amet, consctetur adipiscing elit.Nunc fringilla arcu congue metus aliquam mollis.Mauris nec maximus purus.  Меценаты сидят amet pretium tellus.Quisque at dignissim lacus. 

Новые строки, которые вы видите здесь, фактически находятся в файле; они специальный символ (‘ n ‘) в конце каждой строки. Мы хотим избавиться от них, поэтому нам не нужно беспокоиться о них во время обработки файла.

Как удалить новые строки

Чтобы удалить новые строки полностью, мы можем их снять. Чтобы удалить строку, нужно удалить один или несколько символов, обычно пробел, либо в начале, либо в конце строки.

Совет

Это процесс иногда также называют «обрезкой».

Строковые объекты Python 3 имеют метод, называемый rstrip () , который удаляет символы с правой стороны строки. Английский язык читается слева направо, поэтому удаление символов с правой стороны удаляет символы с конца.

Если переменная называется mystring , мы можем удалить его правая сторона с mystring.rstrip ( chars ) , где chars — это строка символов, которые нужно удалить. Например, «123abc» .rstrip («bc») возвращает 123a .

Совет

Когда вы представляете строку в своей программе с ее буквальным содержимым, это называется строковым литералом. В Python (как и в большинстве языков программирования) строковые литералы всегда заключаются в quoted — с обеих сторон одинарными (‘) или двойными («) кавычками. В Python одинарные и двойные кавычки эквивалентны ; вы можете использовать один или другой, если они совпадают на обоих концах строки. Традиционно удобочитаемую строку (например, Hello ) представляют в двойных кавычках ( «Hello» ). Если вы представляете один символ (например, b ) или один специальный символ, такой как символ новой строки ( n ), традиционно используются одинарные кавычки ( ‘b’ , ‘ n’ ). Подробнее о том, как чтобы использовать строки в Python, вы можете прочитать документацию по строкам в Python.

Оператор string .rstrip (‘ n ‘) удаляет символ новой строки с правой стороны строки . Следующая версия нашей программы удаляет символы новой строки при чтении каждой строки из текстового файла:

 mylines = [] # Объявить пустой список  .with open ('lorem.txt', 'rt') as myfile: # Открыть lorem.txt для чтения текста.  for myline в myfile: # Для каждой строки в файле mylines.append (myline.rstrip (' n')) # убрать новую строку и добавить в список. for element in mylines: # Для каждого элемента в списке print (  element) # распечатайте его. 

Теперь текст хранится в переменной списка, поэтому к отдельным строкам можно обращаться по номеру индекса. Новые строки были удалены, поэтому нам не о них беспокоиться. Мы всегда можем вернуть их позже, если реконструируем файл и запишем его на диск.

Теперь давайте поищем в строках списка конкретную подстроку.

Поиск текста по подстроке

Допустим, мы хотим найти каждое вхождение определенной фразы или даже отдельную букву. Например, может быть, нам нужно знать, где находится каждое «е». Мы можем сделать это с помощью строкового метода find ().

В списке каждая строка нашего текста хранится как строковый объект. Все строковые объекты имеют метод find () , который определяет местонахождение первого вхождения подстроки в строку.

Давайте использовать find () для поиска буквы «e» в первой строке нашего текстового файла, который хранится в списке mylines . Первый элемент mylines — это строковый объект, содержащий первую строку текстового файла. Этот строковый объект имеет метод find () .

В скобках find () мы указываем параметры. Первый и единственный обязательный параметр — это строка для поиска, «e» . Оператор mylines [0] .find («e») предписывает интерпретатору искать вперед, начиная с начала строки, по одному символу за раз, пока не найдет букву «e». . » Когда он его находит, он прекращает поиск и возвращает индексный номер, в котором находится буква «e». Если он достигает конца строки, он возвращает -1 , чтобы указать, что ничего не было найдено.

Пример

 print (mylines  [0] .find ("e")) 

Вывод:

3

Возвращаемое значение «3» говорит нам, что буква «е» — четвертый символ, буква «е» в «Lorem». (Помните, что индекс отсчитывается от нуля: индекс 0 — это первый символ, 1 — второй и т. Д.)

Метод find () принимает два необязательные дополнительные параметры: индекс start и индекс stop , указывающие, где в строке должен начинаться и заканчиваться поиск. Например, string .find («abc», 10, 20) выполняет поиск подстроки «abc», но только с 11-го по 21-й символ. . Если stop не указан, find () начинается с индекса start и останавливается в конце строки.

Пример

Например, следующий оператор ищет «e» в mylines [0] , начиная с пятого символа .

 print (mylines [0] .find ("e", 4)) 

Вывод:

 24 

Другими словами, начиная с 5-го символа в строке [0], первая буква «e» располагается в индексе 24 («e» в «nec»).

Пример

Чтобы начать поиск с индекса 10 и остановиться на индексе 30:

 print (mylines [1] .find ("e", 10, 30)  ) 

Вывод:

 28 

(первая буква «е» в «Меценате»).

Если find () не находит подстроку в диапазоне поиска, он возвращает число -1 , указывающее на ошибку:

 print (mylines [0] .find ("e", 25, 30)) 

Вывод:

-1

Между индексами 25 и 30 не было вхождений «e».

Поиск всех вхождений подстроки

Но что, если мы хотим найти каждое вхождение подстроки, а не только первое, с которым мы столкнемся? Мы можем перебирать строку, начиная с индекса предыдущего совпадения.

В этом примере мы будем использовать цикл while, чтобы несколько раз найти букву «e». Когда вхождение найдено, мы снова вызываем find , начиная с нового места в строке. В частности, местоположение последнего вхождения плюс длина строки (чтобы мы могли пройти мимо последней строки). Когда find возвращает -1 или начальный индекс превышает длину строки, мы останавливаемся.

 # Строим массив  строк из файла, удалить newlinesmylines = [] # Объявить пустой список. с open ('lorem.txt', 'rt') как myfile: # Открыть lorem.txt для чтения текста.  для myline в myfile: # Для каждой строки в файле mylines.append (myline.rstrip (' n')) # убрать новую строку и добавить в список. # Найти и распечатать все вхождения буквы "e" substr = "e  "# подстрока для поиска. для строки в mylines: # строка для поиска index = 0 # текущий индекс: сравниваемый символ prev = 0 # предыдущий индекс: последний сравниваемый символ, пока index  

Вывод:

 e e e eLorem ipsum dolor sit amet, conctetur adipiscing elit.  eNunc fringilla arcu congue metus aliquam mollis.  e e e e e eMauris nec maximus purus.  Меценат сидят amet pretium tellus.  eQuisque at dignissim lacus. 

Включение регулярных выражений

Для сложного поиска используйте регулярные выражения.

Вызывается модуль регулярных выражений Python повторно . Чтобы использовать его в своей программе, импортируйте модуль перед его использованием:

 import re 

Модуль re реализует регулярные выражения путем компиляции шаблона поиска в объект шаблона. Затем методы этого объекта можно использовать для выполнения операций сопоставления.

Например, допустим, вы хотите найти в документе любое слово, которое начинается с буквы d и заканчивается на букву r . Мы можем сделать это с помощью регулярного выражения « bd w * r b ». Что это значит?

последовательность символов значение
b Граница слова соответствует пустой строке (чему угодно, включая вообще ничего), но только если она появляется до или после не -слово характер. «Символы слова» - это цифры от 0 до 9, строчные и прописные буквы или символ подчеркивания (" _ ").
d Строчная буква d .
w* w представляет любой символ слова, а * - это квантификатор, означающий «ноль или более предыдущего символа». Таким образом, w * будет соответствовать нулю или более словесных символов.
r Строчная буква r.
b Граница слова.

Таким образом, это регулярное выражение будет соответствовать любой строке, которая может быть описана как "граница слова, затем строчная буква" 'd', затем ноль или более символов слова, затем строчная буква 'r', затем граница слова ". Строки, описанные таким образом, включают слова destroyer , dour и doctor , а также сокращение dr .

Чтобы использовать это регулярное выражение в операциях поиска Python, мы сначала компилируем его в объект шаблона. Например, следующий оператор Python создает объект шаблона с именем pattern , который мы можем использовать для выполнения поиска с использованием этого регулярного выражения.

 pattern = re.compile (r  " bd  w * r  b") 
Примечание

Буква r перед нашей строкой в ​​приведенном выше утверждении важна. Он сообщает Python интерпретировать нашу строку как необработанную строку, точно так, как мы ее ввели. Если бы мы не добавили к строке префикс r , Python интерпретировал бы escape-последовательности, такие как b , другими способами. Всякий раз, когда вам нужно, чтобы Python интерпретировал ваши строки буквально, укажите его как необработанную строку, добавив к ней префикс r .

Теперь мы можем использовать шаблон методы объекта, такие как search () , для поиска в строке скомпилированного регулярного выражения и поиска совпадения. Если он его находит, он возвращает специальный результат, называемый объектом соответствия. В противном случае он возвращает None , встроенную константу Python, которая используется как логическое значение false.

 import restr = "Доброе утро, доктор.  "pat = re.compile (r"  bd  w * r  b ") # компилировать регулярное выражение"  bd  w * r  b "в шаблон objectif pat.search (str)! = None: # Искать  шаблон.  Если найдено, выведите («Нашел.») 

Вывод:

 Найдено. 

Чтобы выполнить поиск без учета регистра , вы можете указать специальную константу re.IGNORECASE на этапе компиляции:

 import restr = "Hello, DoctoR." pat = re.compile (r "   bd  w * r  b ", re.IGNORECASE) # верхний и нижний регистры будут соответствовать if pat.search (str)! = None: print (" Found it. ") 

Вывод:

 Нашел. 

Собираем все вместе

Итак, теперь мы знаем, как открыть файл, прочитать строки в списке, и найдите подстроку в любом заданном элементе списка. Давайте воспользуемся этими знаниями для создания нескольких примеров программ.

Распечатать все строки, содержащие подстроку

Программа ниже читает файл журнала построчно. Если строка содержит слово «ошибка», оно добавляется в список с названием errors . Если нет, игнорируется. Строковый метод lower () преобразует все строки в нижний регистр для целей сравнения, делая поиск нечувствительным к регистру без изменения исходных строк.

Обратите внимание, что find () вызывается непосредственно для результата метода lower () ; это называется цепочкой методов . Также обратите внимание, что в операторе print () мы создаем строку вывода, объединяя несколько строк с помощью оператора + .

 errors = [] # Список, в котором мы будем хранить результаты. linenum = 0substr = "error" .lower () # Подстрока для поиска. с open ('logfile.txt', 'rt') как myfile: for line  в myfile: белье + = 1 if line.lower (). find (substr)! = -1: # если совпадение без учета регистра, errors.append ("Line" + str (бельеum) + ":" + line.rstrip  (' n')) для ошибок в ошибках: print (err) 

Ввод (хранится в файле logfile.txt):

 Это строка 1 Это строка 2 Строка  3 имеет ошибку! Это строка 4, строка 5 также содержит ошибку! 

Вывод:

 Строка 3: строка 3 содержит ошибку! Строка 5: строка 5 также  имеет ошибку! 

Извлеките все строки, содержащие подстроку, используя регулярное выражение

Программа ниже аналогична указанной выше программе, но с использованием re модуль регулярных выражений. Ошибки и номера строк хранятся в виде кортежей, например, (белье, строка). Кортеж создается дополнительными круглыми скобками в операторе errors.append () . На элементы кортежа ссылаются аналогично списку, с отсчитываемым от нуля индексом в скобках. Как здесь построено, err [0] - это столбец, а err [1] - это связанная строка, содержащая ошибку.

 import reerrors = []leneum = 0pattern = re.compile ("error", re.IGNORECASE) # Компилировать регулярное выражение без учета регистра с open ('logfile.txt', 'rt') как myfile: for в строке myfile: белье  + = 1 if pattern.search (line)! = None: # Если найдено совпадение errors.append ((lnenum, line.rstrip (' n'))) для ошибки в ошибках: # Перебирать список кортежей  print ("Line" + str (err [0]) + ":" + err [1]) 

Вывод:

 Строка 6: 28 марта 2009 г .:  10:37 Ошибка: невозможно связаться с сервером.  В соединении отказано. Строка 10: 28 марта, 10:28:15 Ошибка ядра: указанное местоположение не смонтировано. Строка 14: 28 марта, 11:06:30 ОШИБКА: usb 1-1: невозможно установить конфигурацию, завершается. 

Извлечь все строки, содержащие номер телефона

Программа ниже печатает любую строку текстового файла info.txt , содержащую Американский или международный номер телефона. Это достигается с помощью регулярного выражения " ( + d {1,2})? [ S .-]? D {3} [ s .-]? D {4} ". Это регулярное выражение соответствует следующим обозначениям телефонных номеров:

  • 123-456-7890
  • (123) 456-7890
  • 123456 7890
  • 123.456.7890
  • +91 (123) 456-7890
 import reerrors =  [] бельеум = 0паттерн = re.compile (r "( +  d {1,2})? [ s .-]?  d {3} [ s .-]?  d {4}")  с открытым ('информация. txt ',' rt ') как myfile: for line в myfile: lnenum + = 1 if pattern.search (line)! = None: # Если поиск по образцу находит совпадение, errors.append ((бельеum, line.rstrip ('   n '))) для ошибок в ошибках: print ("Line", str (err [0]), ":" + err [1]) 

Вывод:

 Строка 3: Мой номер телефона 731.215.8881. Строка 7: Вы можете связаться с мистером Уолтерсом по телефону (212) 558-3131. Строка 12: Его агент, миссис Кеннеди, можно связаться по телефону +12 (123  ) 456-7890 Строка 14: С ней также можно связаться по телефону (888) 312.8403, добавочный номер 12. 

Поиск слов в словаре

Программа ниже выполняет поиск в словаре любые слова, начинающиеся с h и заканчивающиеся на pe . Для ввода используется файл словаря, включенный во многие системы Unix, /usr/share/dict/words .

 import refilename = "/usr/share/ dict/words "pattern = re.compile (r"  bh  w * pe $ ", re.IGNORECASE) с open (filename," rt ") как myfile: для строки в myfile: if pattern.search (line)!  = Нет: print (line, end = '') 

Вывод:

 Hopeheliotropehopehornpipehoroscopehype 

Оцените статью
clickpad.ru
Добавить комментарий