Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Современные средства разработки программного обеспечения. Учебное пособие
.pdf
141
6 fileno(): возвращает целочисленный файловый дескриптор, который исполь-
зуется базовой реализацией для запроса операций ввода-вывода из операционной системы.
Пример.
# Getting the integer file descriptor
f = open(__file__, 'r')
#fileno()
print(f.fileno())
f.close()
7 isatty(): возвращает True, если файл подключен к устройству, подобному tty,
и False, если нет.
Пример.
# Checks if file is connected to a tty(-like) device
f = open(__file__, 'r')
#isatty()
print(f.isatty())
f.close()
8 next(): используется, когда файл используется в качестве итератора. Метод
вызывается повторно. Этот метод возвращает следующую строку ввода или вызывает
остановку при EOF, когда файл открыт для чтения (поведение не определено при открытии для записи).
Пример.
# Iterates over the file
f = open(__file__, 'r')
#next()
try:
while f.next():
print(f.next())

142
except:
f.close()
9 truncate([size]): усекает размер файла. Если присутствует необязательный ар-
гумент size, файл усекается (максимум) до этого размера. Размер по умолчанию равен
текущему положению. Текущее положение файла не изменяется. Если указанный размер превышает текущий размер файла, результат зависит от платформы: возможно,
файл может остаться неизменным, увеличиться до указанного размера, как при заполнении нулем, или увеличиться до указанного размера с неопределенным новым содержимым.
Пример.
# Truncates the file
f = open(__file__, 'w')
#truncate()
f.truncate(10)
f.close()
10 close(): Используется для закрытия открытого файла. Закрытый файл
больше нельзя прочитать или записать.
Пример.
# Opening and closing a file
f = open(__file__, 'r')
#close()
f.close()
11 Атрибуты:
a. closed: возвращает логическое значение, указывающее текущее состояние
файлового объекта. Возвращает true, если файл закрыт, и false, когда файл открыт.

143
b. encoding: кодировка, которую использует файл. Когда строки Unicode за-
писываются в файл, они преобразуются в байтовые строки с использованием указанной кодировки.
c. mode: режим ввода-вывода для файла. Если файл был создан с помощью
встроенной функции open(), это будет значением параметра mode.
d. name: если файловый объект был создан с помощью функции open(), указывается имя файла.
e. newlines: Файловый объект, открытый в универсальном режиме перевода
строки, имеет этот атрибут, который отражает соглашение о переводе строки, используемое в файле. Значением этого атрибута являются “\r“, ”\ n“, "\ r \ n", None или
кортеж, содержащий все видимые типы перевода строки.
f. softspace: логическое значение, указывающее, нужно ли печатать пробел
перед другим значением при использовании инструкции print .
Пример.
f = open(__file__, 'a+')
print(f.closed)
print(f.encoding)
print(f.mode)
print(f.newlines)
print(f.softspace)
10.2 Модуль pickle
Модуль pickle позволяет производить чтение и запись в бинарном режиме доступа. Бинарный режим доступа – это когда данные из файла считываются один в
один без какой-либо обработки. Обычно это используется для сохранения и считывания объектов.
Пример. Сохранить в файл список из кортежей:
books = [
("Евгений Онегин", "Пушкин А.С.", 400),

144
("Муму", "Тургенев И.С.", 450),
("Мастер и Маргарита", "Булгаков М.А.", 600),
("Мертвые души", "Гоголь Н.В.", 290)
]
#Открыть файл на запись в бинарном режиме
file = open("out.data", "wb")
#подключить модуль pickle
import pickle
#сохранить этот объект в файл методом dump:
pickle.dump(books, file)
Пример. Считать из файла список из кортежей:
Для чтения этих данных нужно открыть файл на чтение в бинарном режиме:
file = open("out.data", "rb")
Затем вызвать метод load модуля pickle:
bs = pickle.load(file)
Теперь переменная bs ссылается на эквивалентный список:
print(bs)
10.3 Работа с CSV-файлами в Python
CSV-файл
CSV (Comma Separated Values – Значения, разделенные запятыми) – это про-
стой формат для хранения табличных данных (числа и текст) в виде обычного текста. Каждая строка файла представляет собой запись данных. Каждая запись состоит
из одного или нескольких полей, разделенных запятыми. Для работы с файлами CSV
в Python существует встроенный модуль под названием CSV.
При работе с CSV-файлами на Python можно выполнять следующие операции:
- чтение CSV-файла;
- чтение CSV-файлов в словарь с помощью csv;
- запись в CSV-файл;
- запись словаря в CSV-файл;
- чтение CSV-файлов с помощью Pandas;

145
- написание CSV-файлов с помощью Pandas;
- хранение электронной почты в CSV-файле.
Чтение CSV-файла
Чтение из CSV-файла выполняется с помощью объекта reader. CSV-файл открывается как текстовый файл с помощью встроенной в Python функции open(), которая возвращает файловый объект.
Пример. Файл CSV открываем в режиме чтения, объект file преобразуется в
объект csv.reader и выполняется дальнейшая операция.
import csv
filename = "aapl.csv"
# initializing the titles and rows list
fields = []
rows = []
# reading csv file
with open(filename, 'r') as csvfile:
# creating a csv reader object
csvreader = csv.reader(csvfile)
# extracting field names through first row
fields = next(csvreader)
# extracting each data row one by one
for row in csvreader:
rows.append(row)
# get total number of rows
print("Total no. of rows: %d" %
(csvreader.line_num))
# printing the field names
print('Field names are:' + ', '.join(field for field
in fields))
# printing first 5 rows
print('\nFirst 5 rows are:\n')
for row in rows[:5]:
# parsing each column of a row
for col in row:

146
print("%10s" % col, end=" "),
print('\n')
Результат:
В приведенном выше примере используется CSV-файл aapl.csv, который
можно загрузить с сайта [41].
Следует запустить эту программу с файлом aapl.csv в том же каталоге.
Во фрагменте кода.
with open(filename, 'r') as csvfile:
csvreader = csv.reader(csvfile)
Сначала открывается CSV-файл в режиме чтения. Файловый объект называется csvfile. Объект file преобразуется в объект csv.reader и сохраняется
как csvreader.
fields = csvreader.next()
csvreader является итерируемым объектом. Следовательно, метод next() возвращает текущую строку и продвигает итератор к следующей строке. Считанная
первая строка csv-файла содержит заголовки (или имена полей), сохраняется в
списке под названием fields.
for row in csvreader:
rows.append(row)

147
Оставшиеся строки перебирают с помощью цикла for . Каждая строка добавляется в список с именем rows. Каждая строка – это не что иное, как список, содержащий все значения полей.
print("Total no. of rows: %d"%(csvreader.line_num))
csvreader.line_num – счетчик, который возвращает количество считанных
строк.
Чтение CSV-файлов в словарь с помощью csv
Можно преобразовать CSV-файл в словарь, используя модуль csv в Python
и класс csv.DictReader .
Пример. Предположим, есть файл employees.csv, содержащий:
name,department,birthday_month
Ivan Petrow,HR,July
Anna Pawlowa,IT,October
Petr Dalow,Finance,JanuaryПрограмма с помощью csv.DictReader считывает
каждую строку CSV-файла как словарь, где ключами являются заголовки столбцов,
а значениями - соответствующие значения в каждой строке. Затем словари добавляются в список (в данном примере data_list).
import csv
# Open the CSV file for reading
with open('employees.csv', mode='r') as file:
# Create a CSV reader with DictReader
csv_reader = csv.DictReader(file)
# Initialize an empty list to store the
dictionaries
data_list = []
# Iterate through each row in the CSV file
for row in csv_reader:
# Append each row (as a dictionary)
to the list
data_list.append(row)
# Print the list of dictionaries
for data in data_list:

148
print(data)
Результат:
{'name': 'Ivan Petrow', 'department': 'HR', 'birthday_month':
'July'}
{'name': 'Anna Pawlowa', 'department': 'IT', 'birthday_month': 'Oc-
tober'}
{'name': 'Petr Dalow', 'department': 'Finance', 'birthday_month':
'January'}
Запись в CSV-файл
Для записи в файл CSV нужно открыть файл CSV в режиме записи. Затем,
объект file преобразовать в объект csv.writer и выполнять дальнейшие операции.
# importing the csv module
import csv
# field names
fields = ['Name', 'Branch', 'Year', 'CGPA']
# data rows of csv file
rows = [['Nikita', 'COE', '2', '9.0'],
['Sasha', 'COE', '2', '9.1'],
['Anna', 'IT', '2', '9.3'],
['Petr', 'SE', '1', '9.5'],
['Artem', 'MCE', '3', '7.8'],
['Ivan', 'EP', '2', '9.1']]
# name of csv file
filename = "university_records.csv"
# writing to csv file
with open(filename, 'w') as csvfile:
# creating a csv writer object
csvwriter = csv.writer(csvfile)
# writing the fields
csvwriter.writerow(fields)
# writing the data rows
csvwriter.writerows(rows)
В приведенном выше коде:

149
- fields и rows уже определены. fields – это список, содержащий все названия
полей. rows – это список списков. Каждая строка представляет собой список, содержащий значения полей этой строки.
with open(filename, 'w') as csvfile:
csvwriter = csv.writer(csvfile)
- сначала открыт CSV-файл в режиме записи. Файловый объект называется
csvfile. Объект file преобразуется в объект csv.writer. Сохранен объект csv.writer как
csvwriter.
csvwriter.writerow(fields)
- использован метод writerow для записи первой строки, которая представ-
ляет собой не что иное, как имена полей.
csvwriter.writerows(rows)
- использован метод writerows для записи нескольких строк одновременно.
Запись словаря в CSV-файл
Чтобы записать словарь в CSV-файл, объект file (csvfile) преобразуется в объект DictWriter.
Пример.
# importing the csv module
import csv
# my data rows as dictionary objects
mydict = [{'branch': 'COE', 'cgpa': '9.4',
'name': 'Nikita', 'year': '1'},
{'branch': 'COE', 'cgpa': '9.1',
'name': 'Sasha', 'year': '2'},
{'branch': 'IT', 'cgpa': '9.3',
'name': 'Anna', 'year': '2'},
{'branch': 'SE', 'cgpa': '9.5',
'name': 'Petr', 'year': '1'},
{'branch': 'MCE', 'cgpa': '7.8',
'name': 'Artem', 'year': '3'},
{'branch': 'EP', 'cgpa': '7.1',
'name': 'Ivan', 'year': '3'}]

150
# field names
fields = ['name', 'branch', 'year', 'cgpa']
# name of csv file
filename = "university_records.csv"
# writing to csv file
with open(filename, 'w') as csvfile:
# creating a csv dict writer object
writer = csv.DictWriter(csvfile, fieldnames=fields)
# writing headers (field names)
writer.writeheader()
# writing data rows
writer.writerows(mydict)
В этом примере словарь mydict записан в CSV-файл.
with open(filename, 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames = fields)
- объект file (csvfile) преобразуется в объект DictWriter. Имена полей
fieldnames указываются в качестве аргумента.
writer.writeheader()
- метод writeheader просто записывает первую строку csv-файла, используя
предварительно указанные имена полей.
writer.writerows(mydict)
- метод writerows записывает все строки, но в каждой строке записывает
только значения (не ключи).
В итоге CSV-файл выглядит следующим образом:
name,branch,year,cgpa
Nikita,COE,1,9.4
Sasha,COE,2,9.1
Anna,IT,2,9.3
Petr,SE,1,9.5
Artem,MCE,3,7.8
Ivan,EP,3,7.1
В обычном тексте CSV-файл выглядит следующим образом:
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
