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

Работа с файлами CSV

Одним из распространенных файловых форматов, которые хранят в удобном виде информацию, является формат csv. Каждая строка в файле csv представляет отдельную запись или строку, которая состоит из отдельных столбцов, разделенных запятыми. Собственно, поэтому формат и называется Comma Separated Values. Но хотя формат csv – это формат текстовых файлов, Python для упрощения работы с ним предоставляет специальный встроенный модуль csv.

Рассмотрим работу модуля на примере:

import csv

FILENAME = "users.csv"

users = [ ["Tom", 28], ["Alice", 23], ["Bob", 34]

]

with open(FILENAME, "w", newline="") as file: writer = csv.writer(file) writer.writerows(users)

with open(FILENAME, "a", newline="") as file: user = ["Sam", 31]

writer = csv.writer(file) writer.writerow(user)

В файл записывается двухмерный список – фактически таблица, где каждая строка представляет одного пользователя. А каждый пользователь содержит два поля

– имя и возраст. То есть фактически таблица из трех строк и двух столбцов.

При открытии файла на запись в качестве третьего параметра указывается значение newline="" – пустая строка позволяет корректно считывать строки из файла вне зависимости от операционной системы.

Для записи нам надо получить объект writer, который возвращается функцией csv.writer(file). В эту функцию передается открытый файл. А собственно запись производится с помощью метода writer.writerows(users) Этот метод принимает набор строк. В рассматриваемом примере это двухмерный список.

Если необходимо добавить одну запись, которая представляет собой одномерный список, например, ["Sam", 31], то в этом случае можно вызвать метод writer.writerow(user)

В итоге после выполнения скрипта в той же папке окажется файл users.csv, который будет иметь следующее содержимое:

Tom,28

Alice,23

Bob,34

Sam,31

Для чтения из файла нужно создать объект reader и в цикле перебрать все его строки:

import csv

FILENAME = "users.csv"

with open(FILENAME, "r", newline="") as file: reader = csv.reader(file)

for row in reader: print(row[0], " - ", row[1])

Консольный вывод:

Tom - 28

Alice - 23

Bob - 34

Sam - 31

В рассмотренном примере каждая запись или строка представляла собой отдельный список, например, ["Sam", 31]. Но кроме того, модуль csv имеет специальные дополнительные возможности для работы со словарями. В частности, функция csv.DictWriter() возвращает объект writer, который позволяет записывать в файл. А функция csv.DictReader() возвращает объект reader для чтения из файла. Например:

import csv

FILENAME = "users2.csv"

users = [

{"name": "Tom", "age": 28}, {"name": "Alice", "age": 23}, {"name": "Bob", "age": 34}

]

with open(FILENAME, "w", newline="") as file: columns = ["name", "age"]

writer = csv.DictWriter(file, fieldnames=columns) writer.writeheader()

# запись нескольких строк writer.writerows(users)

user = {"name" : "Sam", "age": 41}

# запись одной строки writer.writerow(user)

with open(FILENAME, "r", newline="") as file:

reader = csv.DictReader(file) for row in reader:

print(row["name"], "-", row["age"])

Запись строк также производится с помощью методов writerow() и writerows(). Но теперь каждая строка представляет собой отдельный словарь, и кроме того, производится запись и заголовков столбцов с помощью метода writeheader(), а в метод csv.DictWriter в качестве второго параметра передается набор столбцов.

При чтении строк, используя названия столбцов, можно обратиться к отдельным значениям внутри строки: row["name"].

Работа с бинарными файлами

Бинарные файлы в отличие от текстовых хранят информацию в виде набора байт. При открытии бинарного файла на чтение или запись также надо учитывать, что нужно применять режим "b" в дополнение к режиму записи ("w") или чтения ("r").

При получаем файл в виде набора байт, и наоборот, при записи в метод write() передается набор байт. Например, скопируем файл:

FILENAME = "forest.png"

# файл для чтения

NEWFILENAME = "forest_new.png"

# файл для записи

image_data = [] # список для хранения считанных данных

#считываем файл в список image_data with open(FILENAME, "rb") as file:

image_data = file.read()

#запись выше считанных байт в новый файл with open(NEWFILENAME, "wb") as file:

file.write(image_data)

print(f"Файл {FILENAME} скопирован в {NEWFILENAME}")

Считывает файл, путь к которому хранится в переменной FILENAME. В данном случае это файл изображения "forest.png". Считанные байты помещаются в список image_data. Затем этот список записываем в файл с именем NEWFILENAME. Таким образом, копируется содержимое одного файла в другой.

Также для работы с бинарными файлами Python предоставляет специальный встроенный модуль pickle, который упрощает работу с бинарными файлами. Этот модуль предоставляет два метода:

dump(obj, file): записывает объект obj в бинарный файл file

load(file): считывает данные из бинарного файла в объект Допустим, надо сохранить значения двух переменных:

import pickle

FILENAME = "user.dat"

name = "Tom"

age = 19

with open(FILENAME, "wb") as file: pickle.dump(name, file) pickle.dump(age, file)

with open(FILENAME, "rb") as file: name = pickle.load(file)

age = pickle.load(file)

print("Имя:", name, "\tВозраст:", age)

С помощью функции dump последовательно записываются два объекта. Поэтому при чтении файла также последовательно посредством функции load считываются эти объекты. Консольный вывод программы:

Имя: Tom Возраст: 28

Подобным образом можно сохранять и извлекать из файла наборы объектов:

import pickle

FILENAME = "users.dat"

users = [

["Tom", 28, True], ["Alice", 23, False], ["Bob", 34, False]

]

with open(FILENAME, "wb") as file: pickle.dump(users, file)

with open(FILENAME, "rb") as file: users_from_file = pickle.load(file) for user in users_from_file:

print("Имя:", user[0], "\tВозраст:", user[1], "\tЖенат/замужем:", user[2])

В зависимости от того, какой объект записывался функцией dump, тот же объект будет возвращен функцией load при считывании файла.

Консольный вывод:

Имя: Tom Возраст: 28 Женат/замужем: True Имя: Alice Возраст: 23 Женат/замужем: False Имя: Bob Возраст: 34 Женат/замужем: False

Использование модуля os для работы с файловой системой

Модуль os имеет ряд методов, которые можно использовать для работы с файлами:

1.rename(имя_файла, новое_имя_файла) – переименовывает файл:

>>>f= open ( 'text2.txt' )

>>>f.readlines()

'First line\nSecond line\nThrid line\n'

>>> f= open ( 'text3.txt' )

FileNotFoundError: [Errno 2] No such file or directory: 'text3.txt'

Фрагмент кода показывает, что файл text2.txt содержит данные, а файла text3.txt

нет.

Теперь с помощью метода rename() модуля os переименуем файл text2.txt в файл text3.txt

>>>f.close()

>>>import os

>>>os.rename( 'text2.txt' , 'text3.txt' )

ипопытается открыть файлы text2.txt и text3.txt и прочитать из них данные:

>>>f= open ( 'text2.txt' )

FileNotFoundError: [Errno 2] No such file or directory: 'text2.txt'

>>>open ( 'text3.txt' )

>>>f.readlines()

'First line\nSecond line\nThrid line\n'

>>> f.close()

Результаты подтверждают правильность работы функции rename() по переименованию файлов;

2.remove(имя_файла) – удаляет указанный файл:

>>>os.remove( 'text3.txt' )

>>>open ( 'text3.txt' )

FileNotFoundError: [Errno 2] No such file or directory: 'text3.txt' ;

3.getcwd() – возвращает путь к текущему каталогу, например:

>>> os.getcwd() 'F:\\DISK_D\\PYTHON\\LAB' ;

4. chdir(путь) – сделать каталог, указанный аргументом, текущим каталогом, например:

>>>os.chdir('F:\\DISK_D\\PYTHON')

>>>os.getcwd()

'F:\\DISK_D\\PYTHON' ;

5. listdir(путь) – возвращает в виде списка содержимое указанного каталога (если путь не задан – текущего):

>>> os.listdir()

['LAB', 'LAB.rar', 'python', 'Python_book', 'SAMPLES', 'THEORY', 'ТЕОРИЯ'] ;

6.mkdir(имя_нового_каталога) – создает новый каталог:

>>>os.chdir('TEMP')

>>>os.listdir()

['LAB', 'LAB.rar', 'python', 'Python_book', 'SAMPLES', 'TEMP', 'THEORY', 'ТЕОРИЯ'];

7.rmdir(путь) – удаляет указанный каталог:

>>>os.chdir('TEMP')

>>>os.listdir()

['LAB', 'LAB.rar', 'python', 'Python_book', 'SAMPLES', 'THEORY', 'ТЕОРИЯ'];

Установка пакетов в Python

Установить пакет в Python можно с помощью pip. Для этого в командной строке операционной системы необходимо выполнить команду:

pip install имя_пакета

При установке в Windows, перед pip нужно добавить «python -m». Обновление пакета осуществляется с помощью следующей команды:

pip install имя_пакета -U

Для обновления пакета до последней версии используется команда:

pip install --upgrade имя_пакета

Если установлена последняя версия пакета, но необходимо принудительно переустановить его, то следует воспользоваться следующей командой:

pip install --force-reinstall имя_пакета

Удаление ненужного пакета осуществляется командой

pip uninstall имя_пакета

Посмотреть список установленных пакетов Python можно с помощью команды

«pip list».

Найти конкретный пакет по имени можно командой «pip search».

О других командах можно прочесть в справке, которая выдается по команде «pip

help».

Задание 1

Вычисление по формуле должно быть реализовано в отдельной функции. Если модуль является главным, то получить значение N, осуществить вызов функции и вывести на экран N и результат вычисления.

Вариант 1

Задание: Вычислить сумму синусов натуральных чисел от 1 до N.

Формула: S = sin(1) + sin(2) + sin(3) + ... + sin(N)

Условия:

N - случайное целое число от 5 до 15 (использовать random)

Для вычисления синуса использовать функцию sin() из модуля math

Вычисление выполнить с помощью цикла for

Вариант 2

Задание: Вычислить сумму косинусов от π, деленного на натуральные числа.

Формула: S = cos(π/1) + cos(π/2) + cos(π/3) + ... + cos(π/N)

Условия:

N - случайное целое число от 5 до 12 (использовать random)

Для вычисления косинуса и π использовать модуль math

Вычисление выполнить с помощью цикла for

Вариант 3

Задание: Вычислить сумму квадратных корней натуральных чисел.

Формула: S = √1 + √2 + √3 + ... + √N

Условия:

N - случайное целое число от 5 до 15 (использовать random)

Для вычисления квадратного корня использовать функцию sqrt() из модуля math

Вычисление выполнить с помощью цикла for

Вариант 4

Задание: Вычислить сумму натуральных логарифмов чисел.

Формула: S = ln(1) + ln(2) + ln(3) + ... + ln(N)

Условия:

N - случайное целое число от 5 до 15 (использовать random)

Для вычисления натурального логарифма использовать функцию log() из модуля math

Вычисление выполнить с помощью цикла for

Вариант 5

Задание: Вычислить сумму экспонент натуральных чисел.

Формула: S = e¹ + e² + e³ + ... + eᴺ

Условия:

N - случайное целое число от 3 до 8 (использовать random)

Для вычисления экспоненты использовать функцию exp() из модуля math

Вычисление выполнить с помощью цикла for

Вариант 6

Задание: Вычислить сумму тангенсов натуральных чисел.

Формула: S = tan(1) + tan(2) + tan(3) + ... + tan(N)

Условия:

N - случайное целое число от 5 до 12 (использовать random)

Для вычисления тангенса использовать функцию tan() из модуля math

Вычисление выполнить с помощью цикла while

Вариант 7

Задание: Вычислить сумму арктангенсов натуральных чисел.

Формула: S = arctan(1) + arctan(2) + arctan(3) + ... + arctan(N)

Условия:

N - случайное целое число от 5 до 12 (использовать random)

Для вычисления арктангенса использовать функцию atan() из модуля math

Вычисление выполнить с помощью цикла for

Вариант 8

Задание: Вычислить сумму гиперболических синусов натуральных чисел.

Формула: S = sinh(1) + sinh(2) + sinh(3) + ... + sinh(N)

Условия:

N - случайное целое число от 3 до 8 (использовать random)

Для вычисления гиперболического синуса использовать функцию sinh() из модуля math

Вычисление выполнить с помощью цикла for

Вариант 9

Задание: Вычислить сумму десятичных логарифмов натуральных чисел.

Формула: S = log (1) + log (2) + log (3) + ... + log (N)

Условия:

N - случайное целое число от 5 до 15 (использовать random)

Для вычисления десятичного логарифма использовать функцию log10() из модуля math

Вычисление выполнить с помощью цикла for

Вариант 10

Задание: Вычислить сумму чисел, возведенных в степень π.

Формула: S = 1^π + 2^π + 3^π + ... + N^π

Условия:

N - случайное целое число от 3 до 8 (использовать random)

Для возведения в степень использовать функцию pow() из модуля math

Для получения π использовать константу pi из модуля math

Вычисление выполнить с помощью цикла for

Вариант 11

Задание: Вычислить сумму углов в градусах, преобразованных в радианы.

Формула: S = radians(1) + radians(2) + radians(3) + ... + radians(N)

Условия:

N - случайное целое число от 5 до 15 (использовать random)

Для преобразования градусов в радианы использовать функцию radians() из модуля math

Вычисление выполнить с помощью цикла for

Вариант 12

Задание: Вычислить сумму расстояний от начала координат до точек (i, i²).

Формула: S = √(1²+1 ) + √(2²+2 ) + √(3²+3 ) + ... + √(N²+N )

Условия:

N - случайное целое число от 5 до 12 (использовать random)

Для вычисления корня использовать функцию sqrt() из модуля math

Для возведения в степень использовать функцию pow() из модуля math

Вычисление выполнить с помощью цикла for

Вариант 13

Задание: Вычислить сумму гипотенуз прямоугольных треугольников с катетами

iи i+1.

Формула: S = √(1²+2²) + √(2²+3²) + √(3²+4²) + ... + √(N²+(N+1)²)

Условия:

N - случайное целое число от 5 до 12 (использовать random)

Для вычисления корня использовать функцию sqrt() из модуля math

Для возведения в степень использовать функцию pow() из модуля math

Вычисление выполнить с помощью цикла for

Вариант 14

Задание: Вычислить сумму площадей кругов с радиусами от 1 до N.

Формула: S = π×1² + π×2² + π×3² + ... + π×N²

Условия:

N - случайное целое число от 5 до 10 (использовать random)

Для получения π использовать константу pi из модуля math

Для возведения в степень использовать функцию pow() из модуля math

Вычисление выполнить с помощью цикла for

Вариант 15

Задание: Вычислить сумму объемов сфер с радиусами от 1 до N.

Формула: S = (4/3)×π×1³ + (4/3)×π×2³ + (4/3)×π×3³ + ... + (4/3)×π×N³

Условия:

N - случайное целое число от 3 до 8 (использовать random)

Для получения π использовать константу pi из модуля math

Для возведения в степень использовать функцию pow() из модуля math

Вычисление выполнить с помощью цикла for

Вариант 16

Задание: Вычислить сумму длин окружностей с диаметрами от 1 до N.

Формула: S = π×1 + π×2 + π×3 + ... + π×N

Условия:

N - случайное целое число от 5 до 15 (использовать random)

Для получения π использовать константу pi из модуля math

Вычисление выполнить с помощью цикла for

Вариант 17

Задание: Вычислить сумму евклидовых расстояний между последовательными точками.

Формула: S = √((2-1)²+(2²-1²)²) + √((3-2)²+(3²-2²)²) + ... + √((N-(N-1))²+(N²-(N-1)²)²)