[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / Python /

Текстовая обработка в языке Python. Подсказки для начинающих

Как и ряд других популярных скриптовых языков, Python является великолепным инструментом для сканирования и манипуляций с текстовыми данными. Эта статья суммирует возможности текстовой обработки языка Python для тех программистов, которые являются новичками в программировании на языке Python. Эта статья объясняет некоторые основные понятия регулярных выражений и предлагает советы, когда стоит (а когда - не стоит) использовать регулярные выражения при обработке текста.

Что такое Python?


Python - это свободно доступный, интерпретируемый язык очень высокого уровня, разработанный Гвидо ван Россумом. Он объединяет ясный синтаксис с мощной (но необязательной) объектно-ориентированной семантикой. Python широко распространен и высокопортабелен.

Строки - неизменяемые последовательности


Как и в большинстве высокоуровневых языков программирования, строки переменной длины являются базовым типом в языке Python. Python выделяет область памяти для хранения строк (или других значений) "за кулисами", там, где программисту не нужно особенно задумываться об этом. Кроме того, Python имеет несколько возможностей управления строками, отсутствующих в других высокоуровневых языках.

В языке Python строки представляют собой "неизменяемые последовательности" ("immutable sequences"). Программа может обращаться к элементам или подпоследовательностям строк как к любым последовательностям, несмотря на то, что строки, как и кортежи (tuples), не могут быть изменены непосредственно "на месте". Python обращается к подпоследовательностям с помощью гибкой операции "среза", формат которой напоминает задание диапазона строк и столбцов в электронной таблице. Приведенная ниже интерактивная сессия иллюстрирует использование строк и срезов.

>>> s = "mary has a little lamb"
>>> s[0] # индекс с отсчетом от нуля
'm'
>>> s[3] = 'x' # непосредственное изменение элемента не удается
Traceback (innermost last):
File "<stdin>", line 1, in ?
TypeError: object doesn't support item assignment
>>> s[11:18] # 'вырезать' подпоследовательность
'little '
>>> s[:4] # пустое начало среза предполагает нуль
'mary'
>>> s[4] # индекс 4 не включен в срез [:4]
' '
>>> s[5:-5] # может использоваться индекс "с конца" с отрицательными числами
'had a little'
>>> s[:5]+s[5:] # соединение начала и конца среза
'mary had a little lamb'


Другая мощная строковая операция - просто ключевое слово in. Оно предлагает две интуитивные и полезные конструкции:

>>> s = "mary had a little lamb"
>>> for c in s[11:18]: print c, #
печать каждого символа в срезе
...
l i t t l e
>>> if 'x' in s: print 'got x' #
проверка на вхождение символа
...
>>> if 'y' in s: print 'got y' # проверка на вхождение символа
...
got y


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

>>> s2 = """Mary had a little lamb
... its fleece was white as snow
... and everywhere that Mary went
... the lamb was sure to go"""
>>> print s2
Mary had a little lamb
its fleece was white as snow
and everywhere that Mary went
the lamb was sure to go


Как одинарные, так и тройные кавычки могут предваряться буквой "r" для обозначения того, что специальные символы регулярных выражений не должны интерпретироваться Python. Например:

>>> s3 = "this \n and \n that"
>>> print s3
this
and
that
>>> s4 = r"this \n and \n that"
>>> print s4
this \n and \n that


В "r-строках" обратный слэш, который в иных случаях может служить для задания специального символа, обрабатывается как обычный обратный слэш. Это объясняется далее при рассмотрении регулярных выражений.

Файлы и строковые переменные


Когда мы говорим "текстовая обработка", мы обычно подразумеваем обработку содержимого файла. На языке Python не составляет труда считать содержимое текстового файла в строковые переменные, где этим содержимым можно манипулировать. Файловые объекты обеспечивают три метода чтения: .read(), .readline(), and .readlines(). Каждый из этих методов может принимать аргумент для ограничения объема данных, считываемых за один раз, однако в основном они используются без аргумента. .read() считывает весь файл за один раз, и обычно используется для помещения содержимого файла в строковую переменную. Хотя .read() дает наиболее прямое строковое представление содержимого файла, он неудобен для последовательной строчно-ориентированной обработки файла, к тому же это невозможно, если размер файла превышает объем имеющейся памяти.

.readline() и .readlines() очень похожи. И та и другая используются в конструкциях наподобие следующей:

fh = open('c:\autoexec.bat')
for line in fh.readlines():
print line


Различие между .readline() и .readlines() в том, что последняя, как и .read(), считывает весь файл за один раз. .readlines() автоматически парсит содержимое файла в список строк, который может быть обработан с помощью конструкции языка Python for ... in ....

С другой стороны, .readline() считывает только одну строку за раз, и в целом работает гораздо медленнее, чем .readlines(). .readline() следует использовать, только если памяти не хватает для считывания всего файла за один раз.

Если вы используете стандартный модуль, работающий с файлами, вы можете превратить строку в "виртуальный файл" с помощью модуля cStringIO (если требуется создание производных классов, можно использовать StringIO, но начинающим это требуется редко).

Например:

>>> import cStringIO
>>> fh = cStringIO.StringIO()
>>> fh.write("mary had a little lamb")
>>> fh.getvalue()
'mary had a little lamb'
>>> fh.seek(5)
>>> fh.write('ATE')
>>> fh.getvalue()
'mary ATE a little lamb'


Не забывайте, однако, что, в отличие от настоящего файла, "виртуальный файл", сформированный cStringIO - временный. Он исчезнет, когда программа завершится, если вы не предпримете каких-либо шагов, чтобы его сохранить (например, запишете его в реальный файл или воспользуетесь модулем shelve либо базой данных).

Стандартный модуль: string


Модуль string, возможно, в целом наиболее полезный модуль стандартных дистрибутивов языка Python 1.5.*. На самом деле похоже, что многие из возможностей модуля string будут существовать в качестве встроенных строковых методов в Python 1.6 и выше (подробности еще не были опубликованы на момент написания этой статьи). Наиболее вероятно, что любая программа, выполняющая обработку текста, должна начинаться со строки:

import string


Основное правило состоит в том, что если вы можете решить задачу с помощью модуля string, это правильный способ ее решения. В отличие от re (регулярных выражений), функции string в целом гораздо быстрее и в большинстве случаев проще для понимания и использования. Сторонние модули языка Python, включая и некоторые быстрые, написанные на С расширения, предназначены для специализированных задач, однако переносимость и простота, тем не менее, определяют привязку к string везде, где только возможно. Есть и исключения, однако не так много, как вы можете подумать, имея опыт использования других языков.

Модуль string содержит несколько типов инструментов, таких как функции, методы и классы. Он также содержит наиболее общие строковые константы. Например:

>>> import string
>>> string.whitespace
'



Комментарии

xyyvhrmv
28-07-2011   
nvKwtX , [url=http://vadfmjcvkbpk.com/]vadfmjcvkbpk[/url], [link=http://lftoktlvjvtt.com/]lftoktlvjvtt[/link], http://mrtijsuhivus.com/

gqwwglmp
27-07-2011   
M4TxTT <a href="http://gznsjbuitbse.com/">gznsjbuitbse</a>

mpmoiikk
26-07-2011   
It9fLC , [url=http://vafjtylgabin.com/]vafjtylgabin[/url], [link=http://lheazendyivb.com/]lheazendyivb[/link], http://jbzgsytggefh.com/

bnmrlo
25-07-2011   
rWaaXG <a href="http://rxrrctadrtue.com/">rxrrctadrtue</a>

Ollie
25-07-2011   
Life is short, and this article saved valublae time on this Earth.

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / Python /

Текстовая обработка в языке Python. Подсказки для начинающих
19-03-2009   

Как и ряд других популярных скриптовых языков, Python является великолепным инструментом для сканирования и манипуляций с текстовыми данными. Эта статья суммирует возможности текстовой обработки языка Python для тех программистов, которые являются новичками в программировании на языке Python... подробнее

Кол. просмотров: общее - 3399 сегодня - 0

Stackless Python
19-03-2009   

Вы хотите, чтобы ваш любимый язык был меньше, быстрее, гибче и надежнее? Эти цели и ставил перед собой разработчик Stackless Python... подробнее

Кол. просмотров: общее - 3322 сегодня - 1

Из опыта Web-мастера: переползаем на Python
19-03-2009   

Осенью прошлого года был запущен сайт www.iso.ru, разработанный компанией ADT. Движок сайта, представляющий собой набор CGI скриптов, был написан на Perl. По прошествии полугода эксплуатации возникла необходимость расширить функциональность сайта. Поэтому встал вопрос о выборе языка для написания скриптов... подробнее

Кол. просмотров: общее - 5702 сегодня - 1

Еще о функциональном программировании на Python
19-03-2009   

Эта статья продолжает серию статей о функциональном программирования (ФП) на Python. В ней демонстрируется несколько достаточно сложных концепций ФП. Читателю окажется полезным введение в различные подходы программного решения задач... подробнее

Кол. просмотров: общее - 3292 сегодня - 1

Python - основные концепции
19-03-2009   

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход... подробнее

Кол. просмотров: общее - 3329 сегодня - 1



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects