В предыдущих статьях я уже писал о том, что Python довольно многогранен, и может работать с огромными типами файлов. Одним из часто используемых форматов является формат csv. Csv файл предоставляет удобный вариант хранения информации. Аббревиатура csv — Comma Separated Values, название логичное, исходя из структуры самого файла. Каждая строка,это отдельная запись разделенная запятыми. Не будем далеко уходить в теорию и историю, а сразу начнем с примера:
import csv
NAME = "friends.csv"
friends = [
["Kevin", 28],
["Alice", 23],
["Joe", 34]
]
with open(NAME, "w", newline="") as file:
writer = csv.writer(file)
writer.writerows(friends)
with open(NAME, "a", newline="") as file:
user = ["Tima", 31]
writer = csv.writer(file)
writer.writerow(user)
Разбираем вышеописанный код:
-
- В самом начале, мы импортируем модуль для работы с файлом csv.
- Создаем сам файл friends.csv
- В созданный файл, мы записываем двумерный список, по факту у нас получается таблица, где каждая строка является представлением одного нашего друга. Каждая строка содержит два поля, имя и возраст. По сути мы создали таблицу из трех строк и двух столбцов.
- При открытии файла на запись, передаем значение newline=»» с пустой строкой.
- Для записи мы получаем объект writer, который возвращает нам функция csv.writer(file)
- Запись производится методом writer.writerows(friends), в данном случае этот метод принимает созданный нами в самом начале двумерный список
- В случае, если нам надо добавить только одну запись, можно воспользоваться методом write.writerow(friends)
После запуска нашего небольшого приложения, рядом со скриптом появится файл friends.csv. Внутри него будет следующий результат:
Kevin - 28
Alice - 23
Joe - 34
Tima - 31
Выше мы разобрали запись в файл, ниже приведу пример чтения из csv файла. Для чтения, нам необходимо создать объект reader (в Python мы всегда по названию понимаем, что для чего нужно).
import csv
NAME = "friends.csv"
with open(NAME, "r", newline="") as file:
reader = csv.reader(file)
for row in reader:
print(row[0], " - ", row[1])
Все достаточно просто.
- Импортируем модуль для работы с csv
- Открываем наш файл, и незабываем указать значение newline=»»
- Получаем объект reader
- Запускаем цикл for и перебираем все строки
Результат выполнения:
Kevin - 28
Alice - 23
Joe - 34
Tima - 31
Запись словаря в csv
В примерах, которые мы рассматривали, все записи являлись отдельными списками, как например, [«Tima»,31]. Модуль csv имеет так же имеет функционал который используется для работы со словарями.
- csv.DictWriter() — Для записи в файл
- csv.DictReader() — Для чтения из файла
import csv
FILENAME = "users.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(), который производит запись заголовков столбцов.