Рубрики

Работа с CSV-файлами в Python

В этой статье объясняется, как загрузить и проанализировать файл CSV в Python.

Прежде всего, что такое CSV?
CSV (значения, разделенные запятыми) — это простой формат файла , используемый для хранения табличных данных, таких как электронная таблица или база данных. Файл CSV хранит табличные данные (цифры и текст) в виде простого текста. Каждая строка файла представляет собой запись данных. Каждая запись состоит из одного или нескольких полей, разделенных запятыми. Использование запятой в качестве разделителя полей является источником имени для этого формата файла.

Для работы с CSV-файлами в Python существует встроенный модуль csv .

Чтение файла CSV

# импорт модуля CSV

import csv

  
# имя файла csv

filename = "aapl.csv"

  
# инициализация списка заголовков и строк

fields = []

rows = []

  
# чтение CSV-файла

with open(filename, 'r') as csvfile:

    # создание объекта для чтения csv

    csvreader = csv.reader(csvfile)

      

    # извлечение имен полей через первый ряд

    fields = csvreader.next()

  

    # извлечение каждой строки данных один за другим

    for row in csvreader:

        rows.append(row)

  

    # получить общее количество строк

    print("Total no. of rows: %d"%(csvreader.line_num))

  
# печать имен полей

print('Field names are:' + ', '.join(field for field in fields))

  
# печать первых 5 строк

print('\nFirst 5 rows are:\n')

for row in rows[:5]:

    # парсинг каждого столбца строки

    for col in row:

        print("%10s"%col),

    print('\n')

Вывод вышеуказанной программы выглядит следующим образом:

В приведенном выше примере используется CSV-файл aapl.csv, который можно загрузить здесь .
Запустите эту программу с файлом aapl.csv в том же каталоге.

Давайте попробуем понять этот кусок кода.

  • with open(filename, 'r') as csvfile:
        csvreader = csv.reader(csvfile)

    Здесь мы сначала открываем файл CSV в режиме чтения. Файловый объект называется csvfile . Файловый объект преобразуется в объект csv.reader. Мы сохраняем объект csv.reader как csvreader .

  • fields = csvreader.next()

    csvreader — это повторяемый объект. Следовательно, метод .next () возвращает текущую строку и перемещает итератор к следующей строке. Поскольку первая строка нашего CSV-файла содержит заголовки (или имена полей), мы сохраняем их в списке, называемом полями .

  • for row in csvreader:
            rows.append(row)

    Теперь мы перебираем оставшиеся строки, используя цикл for. Каждая строка добавляется в список, называемый строками . Если вы попытаетесь напечатать каждую строку, то обнаружите, что эта строка — не что иное, как список, содержащий все значения полей.

  • print("Total no. of rows: %d"%(csvreader.line_num))

    csvreader.line_num — не что иное, как счетчик, который возвращает количество строк, которые были повторены.

Запись в файл CSV

# импорт модуля csv

import csv

  
# имена полей

fields = ['Name', 'Branch', 'Year', 'CGPA']

  
# строки данных файла CSV

rows = [ ['Nikhil', 'COE', '2', '9.0'],

         ['Sanchit', 'COE', '2', '9.1'],

         ['Aditya', 'IT', '2', '9.3'],

         ['Sagar', 'SE', '1', '9.5'],

         ['Prateek', 'MCE', '3', '7.8'],

         ['Sahil', 'EP', '2', '9.1']]

  
# имя файла csv

filename = "university_records.csv"

  
# запись в CSV-файл

with open(filename, 'w') as csvfile:

    # создание объекта csv writer

    csvwriter = csv.writer(csvfile)

      

    # написание полей

    csvwriter.writerow(fields)

      

    # запись строк данных

    csvwriter.writerows(rows)

Давайте попробуем разобраться в приведенном выше коде по частям.

  • поля и строки уже определены. fields — список, содержащий все имена полей. Строки — это список списков. Каждая строка представляет собой список, содержащий значения полей этой строки.
  • with open(filename, 'w') as csvfile:
        csvwriter = csv.writer(csvfile)

    Здесь мы сначала открываем файл CSV в режиме WRITE. Файловый объект называется csvfile . Файловый объект преобразуется в объект csv.writer. Мы сохраняем объект csv.writer как csvwriter .

  • csvwriter.writerow(fields)

    Теперь мы используем метод writerow для записи первой строки, которая представляет собой не что иное, как имена полей.

  •  csvwriter.writerows(rows)

    Мы используем метод writerows для записи нескольких строк одновременно.

Запись словаря в файл CSV

# импорт модуля csv

import csv

  
# мои строки данных как объекты словаря

mydict =[{'branch': 'COE', 'cgpa': '9.0', 'name': 'Nikhil', 'year': '2'},

         {'branch': 'COE', 'cgpa': '9.1', 'name': 'Sanchit', 'year': '2'},

         {'branch': 'IT', 'cgpa': '9.3', 'name': 'Aditya', 'year': '2'},

         {'branch': 'SE', 'cgpa': '9.5', 'name': 'Sagar', 'year': '1'},

         {'branch': 'MCE', 'cgpa': '7.8', 'name': 'Prateek', 'year': '3'},

         {'branch': 'EP', 'cgpa': '9.1', 'name': 'Sahil', 'year': '2'}]

  
# имена полей

fields = ['name', 'branch', 'year', 'cgpa']

  
# имя файла csv

filename = "university_records.csv"

  
# запись в CSV-файл

with open(filename, 'w') as csvfile:

    # создание объекта csv dict writer

    writer = csv.DictWriter(csvfile, fieldnames = fields)

      

    # запись заголовков (имен полей)

    writer.writeheader()

      

    # запись строк данных

    writer.writerows(mydict)

В этом примере мы записываем словарь mydict в файл CSV.

  • with open(filename, 'w') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames = fields)

    Здесь файловый объект ( csvfile ) преобразуется в объект DictWriter.
    Здесь мы указываем имена полей в качестве аргумента.

  •  writer.writeheader()

    Метод writeheader просто записывает первую строку вашего CSV-файла, используя предварительно заданные имена полей.

  • writer.writerows(mydict)

    Метод writerows просто записывает все строки, но в каждой строке записывает только значения (не ключи).

Итак, в конце наш CSV-файл выглядит так:

Важные моменты:

  • В модулях csv может быть задан необязательный параметр диалекта, который используется для определения набора параметров, специфичных для конкретного формата CSV . По умолчанию модуль CSV использует диалект Excel, что делает их совместимыми с электронными таблицами Excel. Вы можете определить свой собственный диалект, используя метод register_dialect .
    Вот пример:
     csv.register_dialect(
    'mydialect',
    delimiter = ',',
    quotechar = '"',
    doublequote = True,
    skipinitialspace = True,
    lineterminator = '\r\n',
    quoting = csv.QUOTE_MINIMAL)

Теперь, определяя объект csv.reader или csv.writer, мы можем указать диалект как
это:

csvreader = csv.reader(csvfile, dialect='mydialect')
  • Теперь предположим, что CSV-файл выглядит следующим образом:

    Заметим, что разделитель — это не запятая, а точка с запятой. Кроме того, строки разделены двумя символами новой строки вместо одной. В таких случаях мы можем указать разделитель и терминатор строки следующим образом:

    csvreader = csv.reader(csvfile, delimiter = ';', lineterminator = '\n\n')

Итак, это было краткое, но краткое обсуждение о том, как загружать и анализировать файлы CSV в программе на Python.

Этот блог предоставлен Нихилом Кумаром . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью, используя contrib.geeksforgeeks.org, или отправить свою статью по электронной почте на адрес contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Работа с CSV-файлами в Python

0.00 (0%) 0 votes