Уведомления

Группа в Telegram: @pythonsu

#1 Июль 16, 2008 20:56:56

Michael_2
От:
Зарегистрирован: 2008-07-16
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Класс для работы с csv

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

Пример использования класса
>>> for i in TestClass(fname = ‘a.csv’, fields=,
delim=';'):
…. print i
{'test1': ‘passed11’, ‘test2’: ‘passed12’}
{'test1': ‘passed21’, ‘test2’: ‘passed22’}



Офлайн

#2 Июль 16, 2008 21:39:08

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Класс для работы с csv

А чем стандартный модуль csv не угодил?
А вообще - наследуйте class DictWriter, например (он создаст словарь из файла), и дописывайте метод который выбирает нужные поля…

Офлайн

#3 Июль 16, 2008 21:50:13

Michael_2
От:
Зарегистрирован: 2008-07-16
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Класс для работы с csv

А можно по-подробнее. Я в Питоне совсем новичок.



Офлайн

#4 Июль 16, 2008 22:59:11

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Класс для работы с csv

Можно и подробнее.
Вот например решение.

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’}
Специально сделал “в лоб”, что бы было понятнее.
Наследование с оформлением этого кода в метод - делай сам ;)

Офлайн

#5 Июль 16, 2008 23:00:24

Michael_2
От:
Зарегистрирован: 2008-07-16
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Класс для работы с csv

Ferroman, спасибо тебе огромное!!!



Офлайн

#6 Июль 17, 2008 01:08:26

Michael_2
От:
Зарегистрирован: 2008-07-16
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Класс для работы с csv

Вот еще столкнулся с проблемкой
“Класс возвращает итератор по строчкам указанного csv файлика”
как это реализовать?
И как должно правильно использоваться
>>> for i in TestClass(fname = ‘a.csv’, fields=,
delim=';'):
…. print i
Выручите, пожалуйста!



Офлайн

#7 Июль 17, 2008 01:21:16

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Класс для работы с csv

А вот это ищи в гугле по словам python, “итератор” и посмотри литературу в прикреплённой теме, там есть нужные ссылки.
На intuit.ru посмотри.

Офлайн

#8 Июль 17, 2008 01:46:04

Michael_2
От:
Зарегистрирован: 2008-07-16
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Класс для работы с csv

а на примере этого класса объяснить можно. не могу понять



Офлайн

#9 Июль 17, 2008 01:54:20

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Класс для работы с csv

А что именно не можешь понять?
Как пробовал?
Что получилось?

Офлайн

#10 Июль 17, 2008 01:59:25

Michael_2
От:
Зарегистрирован: 2008-07-16
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Класс для работы с csv

Я сделал класс
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”, );

Т.е. При вызове метода у меня печатается все содержимое. А как сам класс может возвращать итератор? Да еще и по строчкам? Если бы я это делал на С++, я б делал отдельно метод. А как это сделать на Питоне? Можешь помочь, пожалуйста



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version