Автор оригинала: Pankaj Kumar.
В этом уроке мы рассмотрим модуль CSV Python, который очень полезен для обработки csv-файлов.
Используя этот модуль, который поставляется в комплекте с Python, мы можем легко читать и записывать в CSV-файлы.
Давайте начнем!
Использование модуля Python csv
Мы должны импортировать модуль csv, чтобы использовать соответствующие методы.
import csv
Теперь, в зависимости от того, что вы хотите сделать, мы можем читать или записывать в csv-файлы, используя соответствующие объекты.
Давайте сначала рассмотрим чтение csv-файлов.
Чтение из csv-файлов с помощью csv.reader()
Для чтения из csv-файла мы должны создать объект reader, который затем проанализирует файл и заполнит наш объект Python.
Модуль csv
Python имеет метод с именем csv.reader ()
, который автоматически создаст объект чтения csv!
Мы должны вызвать метод csv.reader()
для уже открытого объекта файла, используя open()
.
import csv reader = csv.reader(file_object)
Обычно рекомендуемый подход заключается в том, чтобы заключить все с помощью с
контекстным менеджером.
Вы можете сделать что-то похожее на это:
import csv # Open the csv file object with open('sample.csv', 'r') as f: # Construct the csv reader object from the file object reader = csv.reader(f)
Объект reader будет итеративным, состоящим из всех строк в csv-файле. По умолчанию каждая строка | будет списком Python, так что это будет очень удобно для нас!
Таким образом, вы можете напрямую печатать строки, используя цикл for, как показано ниже:
for row in reader: print(row)
Хорошо. Теперь, когда у нас есть базовый код шаблона, давайте распечатаем содержимое приведенного ниже файла с помощью csv.reader()
.
Давайте рассмотрим sample.csv
, чтобы иметь следующий контент.
Club,Country,Rating Man Utd,England,7.05 Man City,England,8.75 Barcelona,Spain,8.72 Bayern Munich,Germany,8.75 Liverpool,England,8.81
Теперь давайте запустим код:
import csv with open('sample.csv', 'r') as f: reader = csv.reader(f) for row in reader: print(row)
Выход
['Club', 'Country', 'Rating'] ['Man Utd', 'England', '7.05'] ['Man City', 'England', '8.75'] ['Barcelona', 'Spain', '8.72'] ['Bayern Munich', 'Germany', '8.75'] ['Liverpool', 'England', '8.81']
Итак, мы получаем все строки. Здесь, как вы можете видеть, csv
дал нам пробел после запятой.
Если вы хотите разобрать отдельные слова, разделив их с помощью символа пробела, вы можете просто передать его в csv.reader(разделитель=' ')
в качестве символа разделителя.
Давайте попробуем изменить код прямо сейчас:
import csv with open('sample.csv', 'r') as f: reader = csv.reader(f, delimiter=' ') for row in reader: print(row)
Выход
['Club,', 'Country,', 'Rating'] ['Man', 'Utd,', 'England,', '7.05'] ['Man', 'City,', 'England,', '8.75'] ['Barcelona,', 'Spain,', '8.72'] ['Bayern', 'Munich,', 'Germany,', '8.75'] ['Liverpool,', 'England,', '8.81']
Действительно, теперь мы разделили слова, так что Man Utd
становится Man
и Utd
.
Аналогично, если вы хотите проанализировать содержимое с разделителями, просто передайте этот символ в качестве разделителя в csv.reader()
.
Давайте теперь рассмотрим запись в csv-файл.
Запись в csv-файлы с помощью csv.writer()
Аналогично методу csv.reader()
для чтения, у нас есть метод csv.writer()
для записи в файлы.
Это вернет объект writer
, который мы можем использовать для записи строк в файл назначения.
Давайте посмотрим, как мы можем это использовать. Сначала создайте объект writer
:
import csv with open('output.csv', 'w') as f: writer = csv.writer(f)
Теперь мы можем использовать метод writer.writerow(row)
для записи строки. Здесь, как и в объекте reader, строка
представляет собой список.
Итак, мы можем вызвать его следующим образом:
writer.writerow(['Club', 'Country', 'Rating'])
Давайте посмотрим запустим всю программу прямо сейчас:
import csv with open('output.csv', 'w') as f: writer = csv.writer(f) writer.writerow(['Club', 'Country', 'Rating']) clubs = [['Real Madrid', 'Spain', 9.1], ['Napoli', 'Italy', 7.5]] for club in clubs: writer.writerow(club)
Давайте теперь посмотрим на output.csv
.
Club,Country,Rating Real Madrid,Spain,9.1 Napoli,Italy,7.5
Действительно, у нас есть наши строки в выходном файле!
ПРИМЕЧАНИЕ : Аналогично csv.reader(разделитель)
, мы также можем передать символ разделителя для записи с помощью csv.writer(разделитель)
Если вы внимательно наблюдали, мы вручную перебрали наш список строк (список списков) и записали каждую строку одну за другой.
Оказывается, есть еще один метод под названием writer.writerows(rows)
, который может напрямую записывать все наши строки!
Давайте проверим это. Удалите output.csv
и выполните приведенный ниже код.
import csv with open('output.csv', 'w') as f: writer = csv.writer(f) writer.writerow(['Club', 'Country', 'Rating']) clubs = [['Real Madrid', 'Spain', 9.1], ['Napoli', 'Italy', 7.5]] writer.writerows(clubs)
Выход
Club,Country,Rating Real Madrid,Spain,9.1 Napoli,Italy,7.5
Мы действительно получаем тот же результат, что и раньше!
Использование csv.DictReader() и csv.DictWriter() для чтения и записи в csv в качестве словаря
Помните, что при чтении с помощью объекта reader
мы получили объекты по строкам в виде списка?
Если вам нужно точное отображение column_name: row_name
, мы можем использовать класс csv.DictReader
и вместо этого получить словарь!
Давайте посмотрим, как мы можем читать из csv-файла в словарь.
import csv with open("sample.csv", 'r') as file: csv_file = csv.DictReader(file) for row in csv_file: print(dict(row))
Здесь csv.DictReader()
возвращает итерацию объектов OrderedDict ()
. Нам нужно преобразовать каждую строку OrderedDict
в dict
, используя dict(row)
.
Давайте посмотрим на результат:
{'Club': 'Man Utd', ' Country': ' England', ' Rating': ' 7.05'} {'Club': 'Man City', ' Country': ' England', ' Rating': ' 8.75'} {'Club': 'Barcelona', ' Country': ' Spain', ' Rating': ' 8.72'} {'Club': 'Bayern Munich', ' Country': ' Germany', ' Rating': ' 8.75'} {'Club': 'Liverpool', ' Country': ' England', ' Rating': ' 8.81'}
Действительно, у нас есть имя столбца, а также значение строки!
Теперь для записи в csv-файл из словаря у вас есть класс csv.DictWriter ()
.
Это почти то же самое , что и csv.write ()
, за исключением того, что вы пишете из словаря, а не из списка.
Однако синтаксис немного отличается. Мы должны указать имена столбцов заранее, как часть наших имен полей
.
Затем нам нужно написать первую строку (заголовок) с помощью writer.write header()
.
fieldnames = ['Club', 'Country', 'Rating'] writer = csv.DictWriter(f, fieldnames=fieldnames) writer.writeheader()
Теперь мы можем перебрать наш список dicts
, в котором есть соответствующая информация.
Давайте перепишем наш старый writer
пример с помощью csv.DictWriter()
.
import csv with open('output.csv', 'w') as f: fieldnames = ['Club', 'Country', 'Rating'] # Set the fieldnames writer = csv.DictWriter(f, fieldnames=fieldnames) # Write the header writer.writeheader() clubs = [{'Club': 'Real Madrid', 'Country': 'Spain', 'Rating': 9.1}, {'Club': 'Napoli', 'Country': 'Italy', 'Rating': 7.5}] for club in clubs: writer.writerow(club)
Теперь мы получим тот же вывод, что и раньше, указывающий на то, что мы успешно записали в csv-файл с помощью нашего объекта csv.DictWriter ()
!
Вывод
Надеюсь, вы поняли, как можно использовать модуль csv
для легкой обработки csv-файлов. Мы упростили чтение и запись в/из csv-файлов, используя подходящие объекты.
Рекомендации
- Статья JournalDev о чтении и записи в csv-файлы на Python