Форум сайта python.su
Задача такая - нужно нафаршировать массив (список списков в данном случае) данными из csv файла, попутно перекодировав их из cp1252 в юникод. Сделать-то я это сделал, но через одно место. Можно ли как-то облагородить код, сделать его более понятным, читаемым, лаконичным? Вдобавок, документация к csv модулю куцая, кто-нибудь знает, что за аргумент “rb”?
import csv MyRow = [] MyList = [] reader = csv.reader(open("data.csv", "rb"), delimiter=';') for x in reader: for y in range(len(x)): value = unicode(x[y], 'cp1251') MyRow.append(value) MyList.append(MyRow) MyRow = []
Отредактировано (Апрель 9, 2008 06:21:18)
Офлайн
1) open(“data.csv”, “rb”) к csv не имеет прямого отношения, это же стандартная функция питона, открывающая файл, а “rb” - это режим чтения бинарных файлов.
2)
import csv
MyList =
reader = csv.reader(open(“data.csv”, “rb”), delimiter=';')
for x in reader:
MyRow =
for y in x:
MyRow.append(unicode(y, ‘cp1251’))
MyList.append(MyRow)
не проверял:(
Офлайн
1) open(“data.csv”, “rb”) к csv не имеет прямого отношения, это же стандартная функция питона, открывающая файл, а “rb” - это режим чтения бинарных файлов.А, вон оно что! А то я в спешке копипастнул код из примера, а там оказывается стандартная функция встроилась.
Отредактировано (Апрель 9, 2008 09:29:32)
Офлайн
Ну разве что замаскировать вложенный цикл ;)
import csv reader = csv.reader(open("data.csv", "rb"), delimiter=';') MyList = [map(lambda x: unicode(x, 'cp1251'), x) for x in reader]
MyList = map(lambda x: map(lambda y: unicode(y, 'cp1251'), x), reader)
Отредактировано (Апрель 9, 2008 10:31:12)
Офлайн
Еще можно читать документацию :)
import codecs, csv
r = csv.reader(codecs.open(filename “rb”, “cp1251”), delimiter=',')
а дальше с правильным csv reader делать все, что хочется.
Офлайн
r = csv.reader(codecs.open(filename “rb”, “cp1251”), delimiter=',')Вот это очень кстати, не знал. Декодирование на лету полезная штука.
Отредактировано (Апрель 9, 2008 13:09:27)
Офлайн
Teddy BearВот здесь есть пара примеров использования.
А с лямбдой тоже интересно, хотя я её еще не успел освоить.
Офлайн