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

Современные средства разработки программного обеспечения. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
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-файл выглядит следующим образом:
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]