Форум сайта python.su
Добрый день! Нуждаюсь в вашей помощи!
Требуется разработать класс, для работы с csv файлом.
Класс возвращает итератор по строчкам указанного csv файлика
Классу задаются:
разделители полей
названия полей.
Итератор фактически возвращает хеш, где ключами будут названия полей, а
значением будет соот. поле из csv файла или None
Также к этому классу требуется написать автоматические тесты.
Пример использования класса
>>> for i in TestClass(fname = ‘a.csv’, fields=,
delim=';'):
…. print i
{'test1': ‘passed11’, ‘test2’: ‘passed12’}
{'test1': ‘passed21’, ‘test2’: ‘passed22’}
Офлайн
А чем стандартный модуль csv не угодил?
А вообще - наследуйте class DictWriter, например (он создаст словарь из файла), и дописывайте метод который выбирает нужные поля…
Офлайн
А можно по-подробнее. Я в Питоне совсем новичок.
Офлайн
Можно и подробнее.
Вот например решение.
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’}
Офлайн
Ferroman, спасибо тебе огромное!!!
Офлайн
Вот еще столкнулся с проблемкой
“Класс возвращает итератор по строчкам указанного csv файлика”
как это реализовать?
И как должно правильно использоваться
>>> for i in TestClass(fname = ‘a.csv’, fields=,
delim=';'):
…. print i
Выручите, пожалуйста!
Офлайн
А вот это ищи в гугле по словам python, “итератор” и посмотри литературу в прикреплённой теме, там есть нужные ссылки.
На intuit.ru посмотри.
Офлайн
а на примере этого класса объяснить можно. не могу понять
Офлайн
А что именно не можешь понять?
Как пробовал?
Что получилось?
Офлайн
Я сделал класс
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”, );
Т.е. При вызове метода у меня печатается все содержимое. А как сам класс может возвращать итератор? Да еще и по строчкам? Если бы я это делал на С++, я б делал отдельно метод. А как это сделать на Питоне? Можешь помочь, пожалуйста
Офлайн