Формат CSV используют, чтобы хранить таблицы в текстовых файлах. Данные очень часто упаковывают именно в таблицы, поэтому CSV-файлы очень популярны, он хорошо подходит для работы в Excel файлах, если его правильно импортировать, чтобы не запороть данные.
CSV расшифровывается как comma-separated values — «значения, разделенные запятыми», однако на самом деле в качестве разделителя можно использовать и символы табуляции.
Пример csv файла:
full_name;salare;kpi
Ivanov Alex;100000;5
Smirnov Alex;120000;7
Andreev Vadim;110000;4
Petrova Ira;90000;3
Этот файл при открытии в Excel примет следующий вид:
full_name | salare | kpi |
---|---|---|
Ivanov Alex | 100000 | 5 |
Smirnov Alex | 120000 | 7 |
Andreev Vadim | 110000 | 4 |
Petrova Ira | 90000 | 3 |
Есть проблемы, при работе с csv через Excel, если в файле есть
данные типа 5235834,5235835
что является строкой с 2 номерами
через запятую, то Excel преобразует это к виду числа, округлив
второе число, и мы получим 5235834,52
Приводит к экспоненциальной форме. Excel заботливо
преобразует «123456789012345»
в число «1,2E+15»
Удаляет лидирующие плюсы «+74955235834»
в формат «74955235834»
Удаляет лидирующие нули, строку «00523446»
Excel превратит в
«523446»
Чтобы изменить это все, требуется поменять тип импорта данных, по умолчанию Excel применяет к данным в загруженном CSV-файле тип «General» — общий.
Модуль csv позволяет как читать, так и создавать файлы этого формата.
Существует два способа чтения файлов CSV, использовать функцию чтения модуля csv, или использовать класс DictReader, используем оба способа.
Первый способ позволяет работать с каждой строкой как со списком, второй метод взаимодействует с каждой строчкой файла как со словарем, где в качестве ключа используется название столбца.
import csv
# Путь к файлу CSV
csv_path = "csv-1/exp-1.csv"
# Используем менеджер контекста чтобы быть уверенными что
# дескриптор файла будет закрыт
with open(csv_path, 'r') as file_obj:
reader = csv.reader(file_obj)
for row in reader:
print(" ".join(row))
csv.reader()
- Получить список со строчками файла.
csv.writer(csv_file, delimiter=';')
- записать списки в файл как
строчки, с указанием какой разделитель использовать.
csv.DictReader(file_obj, delimiter=',')
- получить словарь со
строчками файла, и указанием какой разделитель в файле используется.
Записать в файл список со словарями, где каждый словарь это строка,
и сама запись в файл с использованием метода writer.writerow()
writer = csv.DictWriter(out_file, delimiter=';', fieldnames=fieldnames)
writer.writerow(row)