Чтение онлайн

на главную - закладки

Жанры

Язык программирования Python
Шрифт:

Листинг

>>> s = «Строка в cp1251»

>>> s.decode(«cp1251»)

u'\u0421\u0442\u0440\u043e\u043a\u0430 \u0432 cp1251'

То же самое с помощью встроенной функции unicode:

Листинг

>>> unicode(s, 'cp1251')

u'\u0421\u0442\u0440\u043e\u043a\u0430 \u0432 cp1251'

Одной из полезных функций этого модуля является функция codecs.open, позволяющая открыть файл в другой кодировке:

Листинг

codecs.open(filename, mode[, enc[, errors[, buffer]]])

Здесь:

Листинг

filename

Имя файла.

Листинг

mode

Режим открытия файла

Листинг

enc

Кодировка.

Листинг

errors

Режим реагирования на ошибки кодировки ('strict' - возбуждать исключение, 'replace' - заменять отсутствующие символы, 'ignore' - игнорировать ошибки).

Листинг

buffer

Режим буферизации (0 — без буферизации, 1 — построчно, n — байт буфера).

Заключение

В этой лекции были рассмотрены основные типы для манипулирования текстом: строки и Unicode–строки. Достаточно подробно описаны регулярные выражения — один из наиболее эффективных механизмов для анализа текста. В конце приведены некоторые функции для работы с Unicode.

7. Лекция: Работа с данными в различных форматах.

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

Формат CSV

Файл в формате CSV (comma–separated values — значения, разделенные запятыми) - универсальное средство для переноса табличной информации между приложениями (электронными таблицами, СУБД, адресными книгами и т.п.). К сожалению, формат файла не имеет строго определенного стандарта, поэтому между файлами, порождаемыми различными приложениями, существуют некоторые тонкие различия. Внутри файл выглядит примерно так (файл pr.csv):

Листинг

name,number,text

a,1,something here

b,2,«one, two, three»

c,3,«no commas here»

Для работы с CSV–файлами имеются две основные функции:

Листинг

reader(csvfile[, dialect='excel'[, fmtparam]])

Возвращает читающий объект, который является итератором по всем строкам заданного файла. В качестве csvfile может выступать любой объект, который поддерживает протокол итератора и возвращает строку при обращении к его методу next. Необязательный аргумент dialect, по умолчанию равный 'excel', указывает на необходимость использования того или иного набора свойств. Узнать доступные варианты можно с помощью csv.list_dialects. Аргумент может быть одной из строк, возвращаемых указанной функцией, либо экземпляром подкласса класса csv.Dialect. Необязательный аргумент fmtparam служит для переназначения отдельных свойств по сравнению с заданным параметром dialect набором. Все получаемые данные являются строками.

Листинг

writer(csvfile[, dialect='excel'[, fmtparam]])

Возвращает пишущий объект для записи пользовательских данных с использованием разделителя в заданный файлоподобный объект. Параметры dialect и fmtparam имеют тот же смысл, что и выше. Все данные, кроме строк, обрабатывают функцией str перед помещением в файл.

В следующем примере читается CSV–файл и записывается другой, где числа второго столбца увеличены на единицу:

Листинг

import csv

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

rdr = csv.reader(input_file)

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

wrtr = csv.writer(output_file)

for rec in rdr:

try:

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

except:

pass

wrtr.writerow(rec)

input_file.close

output_file.close

В результате получится файл pr1.csv следующего содержания:

Листинг

name,number,text

a,2,something here

b,3,«one, two, three»

c,4,no commas here

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

Листинг

class DictReader(csvfile, fieldnames[, restkey=None[, restval=None[, dialect='excel']]]])

Создает читающий объект, подобный тому, что рассматривался выше, но помещающий считываемые значения в словарь. Параметры csvfile и dialect те же, что и раньше. Параметр fieldnames задает имена полей списком. Параметр restkey задает значение ключа для помещения списка значений, для которых не хватило имен полей. Параметр restval используется как значение в том случае, если в записи не хватает значений для всех полей. Если параметр fieldnames не задан, имена полей будут прочитаны из первой записи CSV–файла. Начиная с Python 2.4, параметр fieldnames необязателен. Если он отсутствует, ключи берутся из первой строки CSV–файла.

Листинг

class DictWriter(csvfile, fieldnames[, restval="«[, extrasaction='raise'[, dialect='excel']]])

Создает пишущий объект, который записывает в CSV–файл строки, получая данные из словаря. Параметры аналогичны DictReader, но fieldnames обязателен, так как он задает порядок следования полей. Параметр extrasaction указывает на то, какое действие нужно произвести в случае, когда требуемого значения нет в словаре: 'raise' - возбудить исключение ValueError, 'ignore' - игнорировать.

Соответствующий пример дан ниже. В файле 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.

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

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

На границе империй. Том 10. Часть 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 6

Антимаг его величества. Том III

Петров Максим Николаевич
3. Модификант
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Антимаг его величества. Том III

Герой

Бубела Олег Николаевич
4. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Герой

Печать Пожирателя

Соломенный Илья
1. Пожиратель
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Печать Пожирателя

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Шайтан Иван 3

Тен Эдуард
3. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
7.17
рейтинг книги
Шайтан Иван 3

Изгой Проклятого Клана. Том 2

Пламенев Владимир
2. Изгой
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Изгой Проклятого Клана. Том 2

Твое сердце будет разбито. Книга 1

Джейн Анна
Любовные романы:
современные любовные романы
5.50
рейтинг книги
Твое сердце будет разбито. Книга 1

Играть... в тебя

Зайцева Мария
3. Звериные повадки Симоновых
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Играть... в тебя

Князь

Шмаков Алексей Семенович
5. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
5.00
рейтинг книги
Князь

Приказано выжить!

Малыгин Владимир
1. Другая Русь
Фантастика:
боевая фантастика
попаданцы
альтернативная история
7.09
рейтинг книги
Приказано выжить!

Личный аптекарь императора

Карелин Сергей Витальевич
1. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора

Серпентарий

Мадир Ирена
Young Adult. Темный мир Шарана. Вселенная Ирены Мадир
Фантастика:
фэнтези
готический роман
5.00
рейтинг книги
Серпентарий

Цеховик. Книга 1. Отрицание

Ромов Дмитрий
1. Цеховик
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Цеховик. Книга 1. Отрицание