Michael_2
Июль 16, 2008 20:56:56
Добрый день! Нуждаюсь в вашей помощи!
Требуется разработать класс, для работы с csv файлом.
Класс возвращает итератор по строчкам указанного csv файлика
Классу задаются:
разделители полей
названия полей.
Итератор фактически возвращает хеш, где ключами будут названия полей, а
значением будет соот. поле из csv файла или None
Также к этому классу требуется написать автоматические тесты.
Пример использования класса
>>> for i in TestClass(fname = ‘a.csv’, fields=,
delim=';'):
…. print i
{'test1': ‘passed11’, ‘test2’: ‘passed12’}
{'test1': ‘passed21’, ‘test2’: ‘passed22’}
Ferroman
Июль 16, 2008 21:39:08
А чем стандартный модуль
csv не угодил?
А вообще - наследуйте class DictWriter, например (он создаст словарь из файла), и дописывайте метод который выбирает нужные поля…
Michael_2
Июль 16, 2008 21:50:13
А можно по-подробнее. Я в Питоне совсем новичок.
Ferroman
Июль 16, 2008 22:59:11
Можно и подробнее.
Вот например решение.
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
Июль 16, 2008 23:00:24
Ferroman, спасибо тебе огромное!!!
Michael_2
Июль 17, 2008 01:08:26
Вот еще столкнулся с проблемкой
“Класс возвращает итератор по строчкам указанного csv файлика”
как это реализовать?
И как должно правильно использоваться
>>> for i in TestClass(fname = ‘a.csv’, fields=,
delim=';'):
…. print i
Выручите, пожалуйста!
Ferroman
Июль 17, 2008 01:21:16
А вот это ищи в гугле по словам python, “итератор” и посмотри литературу в прикреплённой теме, там есть нужные ссылки.
На intuit.ru посмотри.
Michael_2
Июль 17, 2008 01:46:04
а на примере этого класса объяснить можно. не могу понять
Ferroman
Июль 17, 2008 01:54:20
А что именно не можешь понять?
Как пробовал?
Что получилось?
Michael_2
Июль 17, 2008 01:59:25
Я сделал класс
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”, );
Т.е. При вызове метода у меня печатается все содержимое. А как сам класс может возвращать итератор? Да еще и по строчкам? Если бы я это делал на С++, я б делал отдельно метод. А как это сделать на Питоне? Можешь помочь, пожалуйста