Что такое csv и работа с csv файлами в python

Перед началом работы с файлами csv обязательно ознакомьтесь с конспектом по общим принципам работы с файлами в Python.

Примеры этого конспекта в файле Jupyter otebook

CSV (Comma-Separated Values) файлы – это распространенный формат файлов для хранения табличных данных. Они представляют собой простые текстовые файлы, где каждая строка представляет собой строку данных, а значения внутри строки разделены запятыми (или другими разделителями). CSV файлы могут быть легко созданы и прочитаны различными программами, включая электронные таблицы, такие как Microsoft Excel, и языки программирования, такие как Python.

– CSV файлы – это текстовые файлы с расширением .csv.
– Каждая строка в CSV файле обычно представляет собой строку данных.
– Значения внутри строки разделены запятыми (или другими разделителями, такими как табуляция или точка с запятой).
– Первая строка CSV файла часто содержит заголовки столбцов.
– CSV файлы могут быть открыты и отредактированы в любом текстовом редакторе или программе для работы с электронными таблицами.
– CSV файлы широко используются для хранения данных, обмена данными и анализа данных.

Модуль csv в Python предоставляет функциональность для чтения и записи CSV файлов.

С помощью модуля csv можно читать данные из CSV файла и преобразовывать их в структуры данных Python, такие как списки или словари, можно записывать данные из структур данных Python в CSV файлы,  а также можно манипулировать данными в CSV формате, такими как сортировка, фильтрация и изменение значений.

Функция writer() модуля csv возвращает объект <class ‘_csv.writer’>, отвечающий за преобразование пользовательских данных в строки с разделителями для данного файлового объекта.

Вот наш пример

import csv


kotirovka = [
    ["2020-01-03 10:02:00", "2020-01-03 10:02:59", 256.68, 256.97, 256.61, 256.77],
    ["2020-01-03 10:03:00", "2020-01-03 10:03:59", 256.80, 256.80, 256.60, 256.79],
    ["2020-01-03 10:04:00", "2020-01-03 10:04:59", 256.79, 256.80, 256.70, 256.77],
    ["2020-01-03 10:05:00", "2020-01-03 10:05:59", 256.77, 256.80, 256.45, 256.49],
] #список kotirovka с данными о котировках
with open("myfail.csv", "w", encoding="UTF-8") as file: #открываем (создаем) файл для записи
    history_data = csv.writer(file, dialect="excel", delimiter=",", lineterminator="\n") #объект writer для работы с CSV
    history_data.writerows(kotirovka) #записываем данные в файл
Создаем список kotirovka с данными о котировках. Далее открываем (создаем) файл для записи.
Создаем history_data – объект writer для работы с CSV, указав файл, в который будем записывать данные и настройки формата CSV.
csv.writer – это класс в модуле csv в Python, который предоставляет возможность записывать данные в файлы CSV.

csv.writer в модуле csv имеет несколько параметров для форматирования CSV:

delimiter (разделитель): Устанавливает символ, который будет использоваться в качестве разделителя между значениями столбцов в CSV. По умолчанию используется запятая (,), но вы можете указать другой символ, например, “;” или “\t” (табуляция).

dialect: Диалект ‘excel’ в модуле CSV в Python представляет собой один из предопределенных форматов, оптимизированных для совместимости с приложением Microsoft Excel.

quotechar (символ кавычек): Устанавливает символ, который будет использоваться в качестве символа кавычек для значений, содержащих разделители или специальные символы. По умолчанию используется двойная кавычка (“), но вы можете указать другой символ, например, ‘ или |.

lineterminator (символ завершения строки): Устанавливает символ, который будет использоваться в качестве символа завершения строки. По умолчанию используется новая строка (\n), но вы можете указать другой символ, например, \r\n.

skipinitialspace (пропуск начальных пробелов): Указывает, следует ли пропускать начальные пробелы перед значением столбца. По умолчанию установлено значение False, что означает, что начальные пробелы не будут пропускаться.

Затем записываем данные в файл с помощью .writerows()

.writerow() и .writerows() – это два метода, предоставляемых классом csv.writer в модуле CSV.

Метод .writerow() используется для записи одной строки в CSV файл. Он принимает в качестве аргумента список строк row, где каждая строка представляет значение для отдельного столбца в CSV файле. Метод автоматически добавляет разделители между значениями и символ новой строки в конце строки.

Метод .writerows() используется для записи нескольких строк в CSV файл. Он принимает в качестве аргумента список списков rows, где каждый внутренний список представляет отдельную строку с значениями для столбцов. Метод автоматически добавляет разделители между значениями и символ новой строки в конце каждой строки.

В следующем примере для записи в файл CSV мы используем метод .writerow() в цикле for для каждой строки row в списке kotirovka. Самой первой строкой в файле мы записываем заголовок header, который представляет собой список с названиями столбцов, записываем также с помощью метода writerow().

import csv


kotirovka = [
    ["2020-01-03 10:02:00", "2020-01-03 10:02:59", 256.68, 256.97, 256.61, 256.77],
    ["2020-01-03 10:03:00", "2020-01-03 10:03:59", 256.80, 256.80, 256.60, 256.79],
    ["2020-01-03 10:04:00", "2020-01-03 10:04:59", 256.79, 256.80, 256.70, 256.77],
    ["2020-01-03 10:05:00", "2020-01-03 10:05:59", 256.77, 256.80, 256.45, 256.49],
]
with open("myfail.csv", "w", encoding="UTF-8") as file:
    history_data = csv.writer(file, dialect='excel', delimiter=",", lineterminator="\n")
    header = ["datetime1", "datetime2", "open", "high", "low", "close"]
    history_data.writerow(header)
    for row in kotirovka:
        history_data.writerow(row)
В следующем примере мы читаем содержимое файла CSV
import csv


with open("myfail.csv", "r", encoding="UTF-8") as file:
    history = csv.reader(file, dialect="excel")
    print(type(history))  # <class '_csv.reader'>
    data = list(history)
    print(type(data))  # <class 'list'>
    data = [list(row) for row in history]
    print(type(data))  # <class 'list'>
    data = [*history]
    print(type(data))  # <class 'list'>


print(history)

Здесь мы открывает созданный ранее файл “myfail.csv” в режиме чтения и использует модуль csv для чтения содержимого файла в виде списка строк.
Используем функцию csv.reader для создания объекта history <class ‘_csv.reader’>, который будет читать содержимое файла построчно.

Преобразовываем объект history класса csv.reader в список (list) data 3 способами.

1) history = list(history)  – просто преобразует итерируемый объект history в список.
2) history = [list(row) for row in history] – использует генератор списка для создания нового списка, где каждый элемент является списком, содержащим строки из history.
3) history = [*history] – использует оператор распаковки для преобразования итерируемого объекта history в список.

Первый вариант является наиболее прямым и простым способом. Однако все три варианта также являются корректными и выполняют одну и ту же задачу. Какой вариант использовать зависит от ваших предпочтений и стиля программирования.

Оцените статью
Репост в TG и VK
Алготрейдинг шаг за шагом. Создай торгового робота на Python с нуля по нашим урокам. Автоматизируй торговлю на бирже по собственной стратегии.