голосование
BASH
PHP
Javascript
HTML
Программы
Firebird
Майнинг
PostgreSQL
Хостинг
Железо
Ресурсы
GIT
SEO
Oracle
Python
Мобильные технологии
Ремонт
Mercurial
Заработок на сайте
Docker
Проголосуйте за категорию!
счётчик
Яндекс.Метрика

Как распарсить csv-файл модуль csv Python

В прошлой статье: как записать данные в csv-файл модуль csv Python я записывал данные в csv-файл. В этот статье проделаем обратное. Довольно часто нужно парсить csv-файлы. Файлы csv представляют собой текстовые файлы. Сами файлы csv состоят из строк. В каждой строке находятся значения разделённые разделителем :;|,. Парсинг таких csv-документов выглядит примерно одинаково. Мы должны прочесть построчно файл и разбить каждую строку по разделителю. Элементы разбитой строки - это то, что нужно. Я решил распарсить csv-файл output.csv.


name;name_last;lang
Ivan;Ivanov;PHP
Anton;Antonov;Javascript
Egor;Egorov;Python

Для парсинга я воспользовался модулем csv. Вы можете не пользоваться этим модулем, но вы усложните свою работу. Вы просто проделаете лишнюю работу. Функция reader модуля csv возвращает объект-считыватель reader. Данные в объекте reader выводил циклом for. Я получил строку name;name_last;lang. Эту строку нажно разбить по разделителю. Я воспользовался функцией split(';'). Разделитель вы должны определить сами. Вы можете почитать о функции split в статье как разбить строку по символу split Python. В каждом csv-файле свой разделитель. При помощи функции extend я добавлял в список данные. Список arr1 я помещал строки, а в список arr2 поместил списки в качестве значений.


# -*- coding: utf-8 -*-

import csv

filepath = r"D:\Egor\script\module\csv\output.csv"
arr1 = []
arr2 = []

with open(filepath, "r", newline="") as file:
    #читаем файл целиком
    reader = csv.reader(file)
    '''
    Циклом for проходим по строкам 
    '''
    for row in reader:
        cur_arr = row[0].split(';')
        '''
        В этом случае вы получите список значений
        '''
        arr1.extend(cur_arr)
        '''
        Тут получится список из списков. 
        Каждый добавленный блок является списком
        '''
        arr2.extend([cur_arr])
    print(arr1)
    print(arr2)

'''
вывод:
['name', 'name_last', 'lang', 'Ivan', 'Ivanov', 'PHP',\
'Anton', 'Antonov', 'Javascript', 'Egoe', 'Egorov', 'Python']
[['name', 'name_last', 'lang'], ['Ivan', 'Ivanov', 'PHP'],\
['Anton', 'Antonov', 'Javascript'], ['Egor', 'Egorov', 'Python']]
'''

Второй пример похож на первый, но есть небольшие отличия. Я использовал класс DictReader модуля csv. Переменная row имеет тип данных OrderedDict([('name', 'Ivan'), ('name_last', 'Ivanov'), ('lang', 'PHP')]). Вы можете проверить переменную при помощи функции type(). Если вы обратитесь к переменной по ключу row['name'] как к элементу словаря, то получите значения соответствующее этому ключу. В каком виде представить данные - решать вам! Решил сделать список из словарей. Для наполнения списка словарями использовал функцию append().


# -*- coding: utf-8 -*-

import csv

filepath = r"D:\Egor\script\module\csv\output.csv"
arr1 = []
arr2 = []
arr3 = []


with open(filepath, "r", newline="") as file:
    reader = csv.DictReader(file, delimiter=';')
    for row in reader:
        print('name:',row['name'],'name_last:',row['name_last'],'lang:',row['lang'])
        cur_arr = [row['name'], row['name_last'], row['lang']]
        cur_dict = {'name': row['name'],'name_last': row['name_last'],'lang': row['lang']}
        '''
        В этом списке находятся строки в качестве значений 
        '''
        arr1.extend(cur_arr)
        '''
        В этом списке находятся списки
        '''
        arr2.extend([cur_arr])
        '''
        В этом списке находятся списки
        '''
        arr3.append(cur_dict)

    print(arr1)
    print(arr2)
    print(arr3)
'''
name: Ivan name_last: Ivanov lang: PHP
name: Anton name_last: Antonov lang: Javascript
name: Egor name_last: Egorov lang: Python
['Ivan', 'Ivanov', 'PHP', 'Anton', 'Antonov', 'Javascript', 'Egor', 'Egorov', 'Python']
[['Ivan', 'Ivanov', 'PHP'], ['Anton', 'Antonov', 'Javascript'], ['Egor', 'Egorov', 'Python']]
[{'name': 'Ivan', 'name_last': 'Ivanov', 'lang': 'PHP'},\
{'name': 'Anton', 'name_last': 'Antonov', 'lang': 'Javascript'},\
{'name': 'Egor', 'name_last': 'Egorov', 'lang': 'Python'}]
'''
просмотры: 4873, уровень: лёгкий уровень, рейтинг: 4, дата: 2017-09-30 16:49:29
проголосовать:

Комментарии:






поиск
реклама
банеры
сервис мониторинга работы сайта, мониторим HTTP, HTTPS, FTP, MYSQL, PostgreSQL, POP3, SMTP, IMAP
http://trainingweb.ru/redirect/pingadmin мониторинг сайтов сервис мониторинга работы сайта, мониторим HTTP, HTTPS, FTP, MYSQL, PostgreSQL, POP3, SMTP, IMAP
http://trainingweb.ru/redirect/domains домен RU домен RU всего за 99 рублей
http://trainingweb.ru/redirect/well_web_vps_kvm Аренда VPS KVM в Европе Мы предлагаем в аренду VPS серверы с выделенным IP-адресом, которые полностью эмулируют физический сервер.