Как читать и записывать файлы CSV в Python
Запись в файл CSV с помощью DictWriter
Давайте запишем следующие данные в наш файл CSV. Он содержит информацию о трех разных штатах США в виде списка, отдельные элементы которого представляют собой словарь.
state_info = [
{
"Name": "Colorado",
"Largest City": "Denver",
"Capital City": "Denver",
"Population": "5773714"
}, {
"Name": "Connecticut",
"Largest City": "Hartford",
"Capital City": "Bridgeport",
"Population": "3605944"
}, {
"Name": "Delaware",
"Largest City": "Dover",
"Capital City": "Wilmington",
"Population": "989948"
}
]
Код показан ниже.
import csv
fields = ['Name', 'Capital City', 'Largest City', 'Population'];
with open('state-data.csv', 'a', newline='') as state_file:
writer = csv.DictWriter(state_file, fields)
writer.writerows(state_info)
Сначала мы определяем имена полей в виде списка и сохраняем их в переменных полей (fields
). Это позволяет объекту записи (writer
) знать, каким будет заголовок каждого столбца в файле CSV. Метод writerows()
сразу записывает все строки, которые мы ему передаем, в CSV-файл. Единственное условие для writerows()
состоит в том, что строки, которые мы хотим записать, являются итерируемыми.
Каждая отдельная строка сама по себе также должна быть итерируемой строкой или числом, если мы используем функцию writer()
, как мы делали в предыдущем примере. В противном случае каждая строка должна быть словарем, который сопоставляет имена полей (fieldnames
)со строками или числами, чтобы класс DictWriter
мог ее обработать.
Теперь попробуем записать в наш CSV-файл следующие данные:
state_info = [
{
"Name": "Florida",
"Capital City": "Tallahassee"
}, {
"Name": "Georgia",
"Area": "153910",
"Largest City": "Atlanta",
"Population": "10711908",
"Capital City": "Atlanta",
}
]
В приведенных выше данных есть два примечательных момента. Во-первых, в нашем штате Флорида отсутствует некоторая информация. Во-вторых, у штата Джорджия есть дополнительная информация, основанная на том, что мы храним в таблице. В-третьих, ключи для штата Джорджия расположены не в том порядке, в котором мы определили поля для нашего CSV-файла.
Как мы можем обрабатывать такие нестандартные данные? Класс DictWriter
предлагает решение. Для отсутствующих ключей мы можем просто указать значение по умолчанию, используя параметр restval
. По умолчанию это пустая строка. Однако вы также можете указать пользовательское значение, например Неизвестно (Unknown). Для дополнительных ключей вы можете использовать параметр extrasaction
, чтобы указать DictWriter
игнорировать эти ключи. Этот параметр по умолчанию вызовет ошибку ValueError
.
Вот как писать во все строки сразу.
import csv
fields = ['Name', 'Capital City', 'Largest City', 'Population']
with open('state-data.csv', 'a', newline='') as state_file:
writer = csv.DictWriter(state_file, fields, restval='Unknown', extrasaction='ignore')
writer.writerows(state_info)
Наш CSV-файл после всех операций записи будет выглядеть так:
Вывод
В этом руководстве рассмотрена большая часть того, что требуется для успешного чтения и записи в CSV-файл с использованием различных функций и классов, предоставляемых Python. Файлы CSV широко используются в программных приложениях, потому что их легко читать и ими легко управлять, а их небольшой размер делает их относительно быстрыми для обработки и передачи.