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