coffe4wolfПотому что у codecs нет режима текст, он все в бинари читает. И между прочим это правильно.
Не пойму почему он ругается на режим чтения
coffe4wolfПотому что у codecs нет режима текст, он все в бинари читает. И между прочим это правильно.
Не пойму почему он ругается на режим чтения
coffe4wolf
Тащемта вот мучаемый файл
>>> 'юАЮЬХДГЕ'.encode('koi8-r').decode('cp1251') 'Абашидзе' >>>
ZerGУ него сам файл раскодирован в koi8-r.
Ну так давайте разберемся? Какая у вас ос? Какая кодировка?
ZerGНикакого .replace() не должно быть, разделитель надо передать при открытии файла.data = str(i[0].decode("cp1251").encode("utf8")).replace(';', '')
ZerGНе, разделитель ‘;’, там где ‘;;;’ это разделители меж трёх пустых полей.
Ну и разделитель там у него не ‘;’ а ‘;;;’
ZerGВообще конечная цель у меня удалить из файла строки с фамилиями, у которых нет данных времени. Проблема в том, что есть строки вида
У меня не было времени углубляться и вопрос у ТС был не по разделителям.
ZerGЭто обычный csv (dsv), у него разделитель не может быть несколько символов (это и не требуется).
Ну и разделитель там у него не ‘;’ а ‘;;;’
abc;def;ghi
abc;"d; e; f";ghi
coffe4wolfВ csv.reader() надо передать точку с запятой как разделитель, тогда он будет по нему разделять.
Такие пары нужно оставлять, как сделать это через модуль csv я так и не додумался, посоветовали делать через регулярки.
py.user.nextВ моём случае разделитель посреди поля не попадётся, софтина выдаёт таблицу строго фиксированного формата типа
потому что разделитель может быть внутри поля - то есть иметь значение.
r'[A-zА-я\s\.]+[;]{3}[\n]{1}[;]{3}'
py.user.nextПо нему он будет разбивать поля и записывать в список?
В csv.reader() надо передать точку с запятой как разделитель, тогда он будет по нему разделять.
coffe4wolf
По нему он будет разбивать поля и записывать в список?
>>> import csv >>> import StringIO >>> >>> stream = StringIO.StringIO('a;b;c;d\r\nd;e;f;g\r\n;;;\r\n') >>> >>> reader = csv.reader(stream, delimiter=';') >>> list(reader) [['a', 'b', 'c', 'd'], ['d', 'e', 'f', 'g'], ['', '', '', '']] >>>
coffe4wolfНадо открыть файл через codecs.open(), указав правильную кодировку. И сам файл тоже должен быть в правильной кодировке. Если у него неправильная кодировка, то нужно сначала его перекодировать в правильную.
Я до этого уже пытался через модуль csv работать с файлом, но не могу разобраться в каком виде файл загружается в reader