training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Как записать данные в csv-файл модуль csv Python

Создано: 25 сентября 2017Автор: Егор Астапов15515 просмотровСложность: легкий

Хочу вам показать как записать данные в csv-файл при помощи модуля csv. Немного теории ). Файл CSV – это текстовый файл, в котором каждая строка имеет несколько полей, разделенных запятыми, или другими разделителями: |;:. Каждая разделённая строчка - ряд, а каждое поле — столбец. Формат CSV не имеет стандарта. При правильных настройках модуль csv может распознавать большую часть этих файлов. Вы также можете создавать файлы CSV, используя данный модуль.

Рассмотрим нашу функцию. Функция csv_writer - самописная. В неё передаются три параметра:

  • path - путь (путь + файл). Для серверного программирования ставьте абсолютные пути
  • fieldnames - название полей (столбцов). Советую ставить русские названия.
  • data - данные в виде списка. У вас должен быть большой список из массы маленьких списков.

class DictWriter(csvfile, fieldnames[, restval=""[, extrasaction='raise'[,dialect='excel']]]) Создает пишущий объект, который записывает в CSV-файл строки, получая данные из словаря. Параметр fieldnames обязателен, так как он задает порядок следования полей. Параметр extrasaction указывает на то, какое действие нужно произвести в случае, когда требуемого значения нет в словаре: 'raise' - возбудить исключение ValueError, 'ignore' - игнорировать.

writeheader() - эта функция записывает строку с именами полей (столбцов).


# -*- coding: utf-8 -*-
import csv

def csv_writer(path, fieldnames, data):
    """
    Функция для записи в файл csv
    path - путь до файла
    fieldnames - название столбцов
    data - список из списков
    """
    with open(path, "w", newline='') as out_file:
        '''
        out_file - выходные данные в виде объекта
        delimiter - разделитель :|;
        fieldnames - название полей (столбцов)
        '''
        writer = csv.DictWriter(out_file, delimiter=';', fieldnames=fieldnames)
        writer.writeheader()
        for row in data:
            writer.writerow(row)

# если точка входа наш скрипт
if __name__ == "__main__":
    data = [['lang','name','level'],
            ['PHP','Ivan','1'],
            ['Python','Vladimir','2'],
            ['Javascript','Egor','3']]

    my_list = []
    fieldnames = data[0]
    cell = data[1:]
    print('столбцы', fieldnames)
    print('ячейки(строки)', cell)
    for values in cell:
        print('строки', values)
        inner_dict = dict(zip(fieldnames, values))
        my_list.append(inner_dict)

    path = "dict_output.csv"
    csv_writer(path, fieldnames, my_list)
'''
вывод:
столбцы ['lang', 'name', 'level']
ячейки(строки) [['PHP', 'Ivan', '1'],\
['Python', 'Vladimir', '2'],\
['Javascript', 'Egor', '3']]
строки ['PHP', 'Ivan', '1']
строки ['Python', 'Vladimir', '2']
строки ['Javascript', 'Egor', '3']
'''

Давайте рассмотрим более упрощенный пример без класса DictWriter. Функция writer(csvfile[, dialect='excel'[, fmtparam]]) возвращает пишущий объект для записи пользовательских данных с использованием разделителя в заданный файлоподобный объект. Необязательный аргумент dialect, по умолчанию равный 'excel', указывает на необходимость использования того или иного набора свойств. Узнать доступные варианты можно с помощью csv.list_dialects(). Аргумент может быть одной из строк, возвращаемых указанной функцией, либо экземпляром подкласса класса csv.Dialect. Необязательный аргумент fmtparam служит для переназначения отдельных свойств по сравнению с заданным параметром dialect набором. Вы можете передавать только два параметра: объект для записи и выбранный вами разделитель.


# -*- coding: utf-8 -*-
import csv

def csv_writer(data, path):
    """
    Функция для записи данных в CSV
    """
    with open(path, "w", newline='') as csv_file:
        '''
        csv_file - объект с данными
        delimiter - разделитель
        '''
        writer = csv.writer(csv_file, delimiter=';')
        for line in data:
            writer.writerow(line)


if __name__ == "__main__":
    data = [['name','name_last','lang',],
            ['Ivan', 'Ivanov', 'PHP', ],
            ['Anton', 'Antonov', 'Javascript', ],
            ['Egor', 'Egorov', 'Python', ]]

    path = "output.csv"
    csv_writer(data, path)
'''
вывод:
name;name_last;lang
Ivan;Ivanov;PHP
Anton;Antonov;Javascript
Egor;Egorov;Python
'''

В статье как распарсить csv-файл модуль csv Python я покажу вам как распарсить csv-файл. Вас ждут 2 примера.

Комментарии

цйнпгцйгнпрг: 15 июня 2018 12:59:54
ок

реклама