Вход/Регистрация
Язык программирования Python
вернуться

Сузи Роман Арвиевич

Шрифт:

Соответствующий пример дан ниже. В файле pr.csv имена полей заданы в первой строке файла, поэтому можно не задавать fieldnames:

Листинг

import csv

input_file = open(«pr.csv», «rb»)

rdr = csv.DictReader(input_file,

fieldnames=['name', 'number', 'text'])

output_file = open(«pr1.csv», «wb»)

wrtr = csv.DictWriter(output_file,

fieldnames=['name', 'number', 'text'])

for rec in rdr:

try:

rec['number'] = int(rec['number']) + 1

except:

pass

wrtr.writerow(rec)

input_file.close

output_file.close

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

Модули для работы с форматами данных обычно содержат функции или конструкторы классов, в частности Reader и Writer.

Эти функции и конструкторы возвращают объекты–итераторы для чтения данных из файла и объекты со специальными методами для записи в файл.

Для разных нужд обычно требуется иметь несколько вариантов классов читающих и пишущих объектов. Новые классы могут получаться наследованием от базовых классов либо обертыванием функций, предоставляемых модулем расширения (написанным на C). В приведенном примере DictReader и DictWriter являются обертками для функций reader и writer и объектов, которые они порождают.

Пакет email

Модули пакета email помогут разобрать, изменить и сгенерировать сообщение в формате RFC 2822. Наиболее часто RFC 2822 применяется в сообщениях электронной почты в Интернете.

В пакете есть несколько модулей, назначение которых (кратко) указано ниже:

Листинг

Message

Модуль определяет класс Message — основной класс для представления сообщения в пакете email.

Листинг

Parser

Модуль для разбора представленного в виде текста сообщения с получением объектной структуры сообщения.

Листинг

Header

Модуль для работы с полями, в которых используется кодировка, отличная от ASCII.

Листинг

Generator

Порождает текст сообщения RFC 2822 на основании объектной модели.

Листинг

Utils

Различные утилиты, которые решают разнообразные небольшие задачи, связанные с сообщениями.

В пакете есть и другие модули, которые здесь рассматриваться не будут.

Разбор сообщения. Класс Message

Класс Message — центральный во всем пакете email. Он определяет методы для работы с сообщением, которое состоит из заголовка (header) и тела (payload). Поле заголовка имеет название и значение, разделенное двоеточием (двоеточие не входит ни в название, ни в значение). Названия полей нечувствительны к регистру букв при поиске значения, хотя хранятся с учетом регистра. В классе также определены методы для доступа к некоторым часто используемым сведениям (кодировке сообщения, типу содержимого и т.п.).

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

Пример наиболее употребительных методов экземпляров класса Message с пояснениями:

Листинг

>>> import email

>>> input_file = open(«pr1.eml»)

>>> msg = email.message_from_file(input_file)

Здесь используется функция email.message_from_file для чтения сообщения из файла pr1.eml. Сообщение можно получить и из строки с помощью функции email.message_from_string. А теперь следует произвести некоторые операции над этим сообщением (не стоит обращать внимания на странные имена — сообщение было взято из папки СПАМ). Доступ к полям по имени осуществляется так:

Листинг

>>> print msg['from']

«felton olive» <zinakinch@thecanadianteacher.com>

>>> msg.get_all('received')

['from mail.onego.ru\n\tby localhost with POP3 (fetchmail–6.2.5

polling mail.onego.ru account spam)\n\tfor spam@localhost

(single–drop); Wed, 01 Sep 2004 15:46:33 +0400 (MSD)',

'from thecanadianteacher.com ([222.65.104.100])\n\tby mail.onego.ru

(8.12.11/8.12.11) with SMTP id i817UtUN026093;\n\tWed, 1 Sep 2004

11:30:58 +0400']

Стоит заметить, что в электронном письме может быть несколько полей с именем received (в этом примере их два).

Некоторые важные данные можно получить в готовом виде, например, тип содержимого, кодировку:

Листинг

>>> msg.get_content_type

'text/plain'

>>> print msg.get_main_type, msg.get_subtype

text plain

>>> print msg.get_charset

None

>>> print msg.get_params

[('text/plain', ''), ('charset', 'us–ascii')]

  • Читать дальше
  • 1
  • ...
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: