Найти - Пользователи
Полная версия: Класс для работы с csv
Начало » Python для экспертов » Класс для работы с csv
1 2
Michael_2
Добрый день! Нуждаюсь в вашей помощи!
Требуется разработать класс, для работы с csv файлом.
Класс возвращает итератор по строчкам указанного csv файлика
Классу задаются:
разделители полей
названия полей.
Итератор фактически возвращает хеш, где ключами будут названия полей, а
значением будет соот. поле из csv файла или None
Также к этому классу требуется написать автоматические тесты.

Пример использования класса
>>> for i in TestClass(fname = ‘a.csv’, fields=,
delim=';'):
…. print i
{'test1': ‘passed11’, ‘test2’: ‘passed12’}
{'test1': ‘passed21’, ‘test2’: ‘passed22’}
Ferroman
А чем стандартный модуль csv не угодил?
А вообще - наследуйте class DictWriter, например (он создаст словарь из файла), и дописывайте метод который выбирает нужные поля…
Michael_2
А можно по-подробнее. Я в Питоне совсем новичок.
Ferroman
Можно и подробнее.
Вот например решение.
test1,test2,test3
passed11,passed21,passed31
passed12,passed22,passed32
passed13,passed23,passed33
import csv
reader = csv.DictReader(open("some.csv", "rb"))

# делаем выборку по нужных полях
fields = ['test1','test3']
for row in reader:
temp_dict = {}
for field in fields:
temp_dict[field] = row[field]
print temp_dict
результат
{'test1': ‘passed11’, ‘test3’: ‘passed31’}
{'test1': ‘passed12’, ‘test3’: ‘passed32’}
{'test1': ‘passed13’, ‘test3’: ‘passed33’}
Специально сделал “в лоб”, что бы было понятнее.
Наследование с оформлением этого кода в метод - делай сам ;)
Michael_2
Ferroman, спасибо тебе огромное!!!
Michael_2
Вот еще столкнулся с проблемкой
“Класс возвращает итератор по строчкам указанного csv файлика”
как это реализовать?
И как должно правильно использоваться
>>> for i in TestClass(fname = ‘a.csv’, fields=,
delim=';'):
…. print i
Выручите, пожалуйста!
Ferroman
А вот это ищи в гугле по словам python, “итератор” и посмотри литературу в прикреплённой теме, там есть нужные ссылки.
На intuit.ru посмотри.
Michael_2
а на примере этого класса объяснить можно. не могу понять
Ferroman
А что именно не можешь понять?
Как пробовал?
Что получилось?
Michael_2
Я сделал класс
import csv


class CSV_Parser:

def printCSV(self, path, fields):

reader = csv.DictReader(open(path))
_fields = fields
for row in reader:
temp_dict = {}
for field in _fields:
temp_dict = row
print temp_dict


CSV_Parser().printCSV(“c:\some.csv”, );

Т.е. При вызове метода у меня печатается все содержимое. А как сам класс может возвращать итератор? Да еще и по строчкам? Если бы я это делал на С++, я б делал отдельно метод. А как это сделать на Питоне? Можешь помочь, пожалуйста
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB