Skip to content

Latest commit

 

History

History
94 lines (75 loc) · 4.42 KB

Module_CSV.md

File metadata and controls

94 lines (75 loc) · 4.42 KB

Модуль CSV


Формат 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

Первая строка всегда задает столбцы, а все последующие это строки таблицы.

Проблема при открытии в Excel

Есть проблемы, при работе с csv через Excel, если в файле есть данные типа 5235834,5235835 что является строкой с 2 номерами через запятую, то Excel преобразует это к виду числа, округлив второе число, и мы получим 5235834,52

Приводит к экспоненциальной форме. Excel заботливо преобразует «123456789012345» в число «1,2E+15»

Удаляет лидирующие плюсы «+74955235834» в формат «74955235834»

Удаляет лидирующие нули, строку «00523446» Excel превратит в «523446»

Чтобы изменить это все, требуется поменять тип импорта данных, по умолчанию Excel применяет к данным в загруженном CSV-файле тип «General» — общий.

Запускаю встроенный в Excel механизм импорта. В меню это «Data → Get External Data → From Text»

Модуль 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)