Рубрики
Без рубрики

Модуль Python CSV – Чтение и запись в CSV-файлы

В этом уроке мы рассмотрим модуль CSV Python, который очень полезен для обработки csv-файлов.

Автор оригинала: 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-файлов, используя подходящие объекты.

Рекомендации