Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛЕКЦИЯ 7

.pdf
Скачиваний:
13
Добавлен:
26.03.2016
Размер:
1.84 Mб
Скачать

4.2.Примеры.

Операция чтения двоичных данных из файла возвращает объект типа bytes – последовательность целых чисел, представляющих абсолютные значения байтов (которые могут соответствовать символам, а могут и не соответствовать), который во многих отношениях очень близко напоминает обычную строку:

>>>data = open(‘data.bin’, ‘rb’).read() # Открыть двоичный файл для чтения

>>>data # Строка хранит двоичные данные b’\x00\x00\x00\x07spam\x00\x08’

>>>data[4:8] # Ведет себя как строка

b’spam’

>>> data[4:8][0] # Но в действительности хранит 8-битные целые числа

115

>>> bin(data[4:8][0]) # Функция bin() ‘0b1110011’

4.2.Примеры.

Данные всегда записываются в файл в виде строк, а методы записи не выполняют автоматического форматирования строк:

>>>X, Y, Z = 43, 44, 45 # Объекты языка Python должны

>>>S = ‘Spam’ # записываться в файл только в виде строк

>>>D = {‘a’: 1, ‘b’: 2}

>>>L = [1, 2, 3]

>>>F = open(‘datafile.txt’, ‘w’) # Создает файл для записи

>>>F.write(S + ‘\n’) # Строки завершаются символом \n

>>>F.write(‘%s,%s,%s\n’ % (X, Y, Z)) # Преобразует числа в строки

>>>F.write(str(L) + ‘$’ + str(D)+ ‘\n’) # Преобразует и разделяет символом $

>>>F.close()

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

>>>chars = open(‘datafile.txt’).read() # Отображение строки

>>>chars # в неформатированном виде

“Spam\n43,44,45\n[1, 2, 3]${‘a’: 1, ‘b’: 2}\n”

>>>print(chars) # Удобочитаемое представление Spam

43,44,45

[1, 2, 3]${‘a’: 1, ‘b’: 2}

4.2.Примеры.

Обратные преобразования для получения из строк в текстовом файле объектов языка Python.

>>>F = open(‘datafile.txt’) # Открыть файл снова

>>>line = F.readline() # Прочитать одну строку

>>>line ‘Spam\n’

>>>line.rstrip() # Удалить символ конца строки ‘Spam’ (можно было line[:-1])

>>>line = F.readline() # Следующая строка из файла

>>>line # Это - строка

‘43,44,45\n’

>>>parts = line.split(‘,’) # Разбить на подстроки по запятым

>>>parts

[‘43’, ‘44’, ‘45\n’]

>>>int(parts[1]) # Преобразовать строку в целое число

44

>>>numbers = [int(P) for P in parts] # Преобразовать весь список

>>>numbers

[43, 44, 45]

4.2.Примеры.

Чтобы преобразовать список и словарь можно воспользоваться встроенной функцией eval, которая интерпретирует строку как программный код на языке Python (формально – строку, содержащую выражение на языке Python):

>>>line = F.readline()

>>>line

“[1, 2, 3]${‘a’: 1, ‘b’: 2}\n”

>>>parts = line.split(‘$’) # Разбить строку по символу $

>>>parts

[‘[1, 2, 3]’, “{‘a’: 1, ‘b’: 2}\n”]

>>>eval(parts[0]) [1, 2, 3]

>>>objects = [eval(P) for P in parts] # То же самое для всех строк в списке

>>>objects

[[1, 2, 3], {‘a’: 1, ‘b’: 2}]

Функция eval представляет собой мощный инструмент. И иногда даже слишком мощный. Она без лишних вопросов выполнит любое выражение на языке Python, даже если в результате будут удалены все файлы в компьютере, если передать в выражение соответствующие права доступа! Если вам действительно необходимо извлекать объекты Python из файлов, но вы не можете доверять источнику этих файлов, идеальным решением будет использование модуля pickle, входящего в состав стандартной библиотеки Python.

4.3.Извлечение объектов из файлов с помощью модуля pickle.

Модуль pickle выполняет сериализацию объектов, – преобразование объектов в строку байтов и обратно.

#Сохранить словарь в файле:

>>>D = {‘a’: 1, ‘b’: 2}

>>>F = open(‘datafile.pkl’, ‘wb’)

>>>import pickle

>>>pickle.dump(D, F) # Модуль pickle запишет в файл любой объект

>>>F.close()

#Прочитать словарь обратно:

>>>F = open(‘datafile.pkl’ 'rb')

>>>E = pickle.load(F) # Загружает любые объекты из файла

>>>E

{‘a’: 1, ‘b’: 2}

4.3.Другие инструменты, напоминающие файлы.

Стандартные потоки ввода-вывода

Объекты уже открытых файлов в модуле sys, такие как sys.stdout.

Дескрипторы файлов в модуле os

Целочисленные дескрипторы файлов, обеспечивающие поддержку низкоуровневых операций, таких как блокировка файлов.

Сокеты, каналы и очереди (FIFO)

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

Файлы с доступом по ключу, известные как «хранилища» («shelves») Используются для хранения объектов языка Python по ключу.

Потоки командной оболочки

Такие инструменты, как os.popen и subprocess. Popen, которые поддерживают возможность запуска дочерних процессов и выполнения операций с их стандартными потоками вводавывода.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]