В этой статье будет рассмотрено руководство по работе с файлами «csv» с помощью Python. Термин «csv» означает «значения, разделенные запятыми», где каждая строка или строка содержат текстовые значения, разделенные запятыми. В некоторых случаях для разделения значений вместо запятой также используется «точка с запятой». Однако это не имеет большого значения для правил формата файлов, и логика обработки обоих типов разделителей остается той же.
Формат файла CSV обычно используется для обслуживания баз данных и электронных таблиц. Первая строка в CSV-файле чаще всего используется для определения полей столбцов, а все остальные оставшиеся строки считаются строками. Эта структура позволяет пользователям представлять табличные данные с помощью файлов CSV. Файлы CSV можно редактировать в любом текстовом редакторе. Однако такие приложения, как LibreOffice Calc, предоставляют расширенные инструменты редактирования, сортировки и фильтрации.
Чтение данных из файлов CSV с помощью Python
Модуль CSV в Python позволяет вам читать, записывать и управлять любыми данными, хранящимися в файлах CSV. Чтобы прочитать файл CSV, вам нужно будет использовать метод «reader» из модуля Python «csv», который включен в стандартную библиотеку Python.
Учтите, что у вас есть файл CSV, содержащий следующие данные:
Mango,Banana,Apple,Orange 50,70,30,90
Первая строка файла определяет категорию каждого столбца, в данном случае название фруктов. Во второй строке хранятся значения в каждом столбце (на складе). Все эти значения разделяются запятой. Если бы вы открыли этот файл в приложении для работы с электронными таблицами, таком как LibreOffice Calc, он бы выглядел так:
Теперь, чтобы прочитать значения из файла «fruit.csv» с помощью модуля Python «csv», вам нужно будет использовать метод «reader» в следующем формате:
import csv with open("fruits.csv") as file: data_reader = csv.reader(file) for line in data_reader: print (line)
Первая строка в приведенном выше примере импортирует модуль «csv». Затем оператор «with open» используется для безопасного открытия файла, хранящегося на вашем жестком диске (в данном случае «fruit.csv»). Новый объект «data_reader» создается путем вызова метода «reader» из модуля «csv». Этот метод «читателя» принимает имя файла в качестве обязательного аргумента, поэтому ему передается ссылка на «fruit.csv». Затем выполняется оператор цикла for для печати каждой строки из файла «fruit.csv». После выполнения примера кода, упомянутого выше, вы должны получить следующий результат:
['50', '70', '30', '90']
Если вы хотите назначить номера строк для вывода, вы можете использовать функцию «перечислить», которая присваивает номер каждому элементу в итерации (начиная с 0, если не было изменено).
import csv with open("fruits.csv") as file: data_reader = csv.reader(file) for index, line in enumerate(data_reader): print (index, line)
Переменная index хранит счетчик для каждого элемента. После выполнения примера кода, упомянутого выше, вы должны получить следующий результат:
0 ['Mango', 'Banana', 'Apple', 'Orange'] 1 ['50', '70', '30', '90']
Поскольку первая строка в файле «csv» обычно содержит заголовки столбцов, вы можете использовать функцию «перечислить» для извлечения этих заголовков:
import csv with open("fruits.csv") as file: data_reader = csv.reader(file) for index, line in enumerate(data_reader): if index == 0: headings = line print (headings)
Блок «if» в приведенном выше утверждении проверяет, равен ли индекс нулю (первая строка в файле «fruit.csv»). Если да, то значение переменной «строка» присваивается новой переменной «заголовки». После выполнения приведенного выше примера кода вы должны получить следующий результат:
['Mango', 'Banana', 'Apple', 'Orange']
Обратите внимание, что вы можете использовать свой собственный разделитель при вызове метода csv.reader, используя необязательный аргумент «разделитель» в следующем формате:
import csv with open("fruits.csv") as file: data_reader = csv.reader(file, delimiter=";") for line in data_reader: print (line)
Поскольку в файле csv каждый столбец связан со значениями в строке, вы можете создать объект «словарь» Python при чтении данных из файла «csv». Для этого вам нужно использовать метод «DictReader», как показано в приведенном ниже коде:
import csv with open("fruits.csv") as file: data_reader = csv.DictReader(file) for line in data_reader: print (line)
После выполнения примера кода, упомянутого выше, вы должны получить следующий результат:
{'Mango': '50', 'Banana': '70', 'Apple': '30', 'Orange': '90'}</cce_text> So now you have a dictionary object that associates individual columns with their corresponding values in the rows. This works fine if you have only one row. Let's assume that the "fruits.csv" file now includes an additional row that specifies how many days it will take for the stock of fruit to perish. [cce_text width="100%" height="100%" escaped="true" theme="blackboard" nowrap="0"]Mango,Banana,Apple,Orange 50,70,30,90 3,1,6,4 Если у вас несколько строк, выполнение одного и того же примера кода, приведенного выше, приведет к другому результату.
{'Mango': '50', 'Banana': '70', 'Apple': '30', 'Orange': '90'} {'Mango': '3', 'Banana': '1', 'Apple': '6', 'Orange': '4'}
Это может быть не идеально, поскольку вы можете сопоставить все значения, относящиеся к одному столбцу, к одной паре ключ-значение в словаре Python. Вместо этого попробуйте этот пример кода:
import csv with open("fruits.csv") as file: data_reader = csv.DictReader(file) data_dict = {} for line in data_reader: for key, value in line.items(): data_dict.setdefault(key, []) data_dict[key].append(value) print (data_dict)
После выполнения примера кода, упомянутого выше, вы должны получить следующий результат:
{'Mango': ['50', '3'], 'Banana': ['70', '1'], 'Apple': ['30', '6'], 'Orange': ['90', '4']}
Цикл «for» используется для каждого элемента объекта «DictReader» для перебора пар ключ-значение. Перед этим определяется новая переменная словаря Python «data_dict». Он будет хранить окончательные сопоставления данных. Во втором блоке цикла for используется метод setdefault словаря Python. Этот метод присваивает значение ключу словаря. Если пара «ключ-значение» не существует, создается новая из указанных аргументов. Таким образом, в этом случае новый пустой список будет назначен ключу, если он еще не существует. Наконец, «значение» добавляется к соответствующему ключу в конечном объекте «data_dict».
Запись данных в файл CSV
Чтобы записать данные в файл «csv», вам нужно будет использовать метод «writer» из модуля «csv». В приведенном ниже примере к существующему файлу «fruit.csv» будет добавлена новая строка.
import csv with open("fruits.csv", "a") as file: data_writer = csv.writer(file) data_writer.writerow([3,1,6,4])
Первый оператор открывает файл в режиме «добавления», обозначенном аргументом «а». Затем вызывается метод «писателя», и ему передается ссылка на файл «fruit.csv» в качестве аргумента. Метод «writerow» записывает или добавляет новую строку в файл.
Если вы хотите преобразовать словарь Python в файловую структуру «csv» и сохранить вывод в файле «csv», попробуйте этот код:
import csv with open("fruits.csv", "w") as file: headings = ["Mango", "Banana", "Apple", "Orange"] data_writer = csv.DictWriter(file, fieldnames=headings) data_writer.writeheader() data_writer.writerow({"Mango": 50, "Banana": 70, "Apple": 30, "Orange": 90}) data_writer.writerow({"Mango": 3, "Banana": 1, "Apple": 6, "Orange": 4})
После открытия пустого файла «fruit.csv» с помощью оператора «with open» определяется новая переменная «заголовки», которая содержит заголовки столбцов. Новый объект «data_writer» создается путем вызова метода «DictWriter» и передачи ему ссылки на файл «fruit.csv» и аргумент «fieldnames». В следующей строке заголовки столбцов записываются в файл с помощью метода «writeheader». Последние два оператора добавляют новые строки к соответствующим заголовкам, созданным на предыдущем шаге.
Заключение
Файлы CSV предоставляют удобный способ записи данных в табличном формате. Встроенный в Python модуль «csv» позволяет легко обрабатывать данные, доступные в файлах «csv», и реализовывать на них дополнительную логику.