Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 6, 2016 12:26:17

coffe4wolf
Зарегистрирован: 2016-04-21
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

CSV-файл - определение и изменение кодировки

В наличии CSV-файл с таблицей и разделителями точка с запятой, который содержит список фамилий на русском языке. Есть необходимость удалить из файла определённые строки, решил я это делать при помощи регулярных выражений. Однако возникла проблема.
Сырой вывод через print(repr()) выводит русские символы следующим образом:
“\xc0\xe1\xe0\xf8\xe8\xe4\xe7\xe5 \xc0.\xc0.;;;\n”
Как результат регулярка не цепляет русские символы, так как видит эту абракадабру, насколько я понимаю.
Какие есть варианты для решения проблемы? Не совсем ясно в какой кодировке файл (pyCharm в нижнем правом углу выставил ISO-8859-1), его лучше перекодировать в какой-либо другой формат, в котором регулярка будет цеплять кириллицу, или же в питоне есть возможность настроить регулярки?

import re
import csv
i_file = open('testcsv.csv','rt')
txt = ''
for row in i_file:
     txt += row #собираю файл в строку
txt = re.sub(r'[А-я]+', '1', txt) #шаблон чисто для проверки
print((txt))

Отредактировано coffe4wolf (Июнь 6, 2016 12:27:16)

Офлайн

#2 Июнь 6, 2016 21:42:01

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

CSV-файл - определение и изменение кодировки

coffe4wolf
Однако возникла проблема. Сырой вывод через print(repr())
1. Проблема не в принте. Открывать файл надо с указанием его кодировки.
i_file = open('testcsv.csv','rt',encoding="utf-8")
зачем
import csv
Вы это не используете. Это мусор.
Зачем собирать файл в строку кода вы строки хотите выкидывать. Применяйте регулярные выражения к строкам



Офлайн

#3 Июнь 7, 2016 10:12:51

coffe4wolf
Зарегистрирован: 2016-04-21
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

CSV-файл - определение и изменение кодировки

doza_and

doza_and
1. Проблема не в принте. Открывать файл надо с указанием его кодировки.

i_file = open('testcsv.csv','rt',encoding=“utf-8”)

Но ведь у open нет атрибута encoding о.О

doza_and
зачем

import csv
Осталось с прошлой версии скрипта, забыл удалить

Офлайн

#4 Июнь 7, 2016 22:06:48

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

CSV-файл - определение и изменение кодировки

coffe4wolf
Но ведь у open нет атрибута encoding о.О
https://docs.python.org/3/library/functions.html#open
есть.
Если речь идет о python2.x то там есть модуль codecs.



Офлайн

#5 Июнь 8, 2016 11:48:22

coffe4wolf
Зарегистрирован: 2016-04-21
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

CSV-файл - определение и изменение кодировки

doza_and
О, таки благодарю, не знал. Использую версию 2.7

Попробовал этим методом, но пайчам выплюнул ошибки

C:\Python27\python.exe C:/Users/User/PycharmProjects/csveditor/csveditor.py
Traceback (most recent call last):
  File "C:/Users/User/PycharmProjects/csveditor/csveditor.py", line 4, in <module>
    i_file = codecs.open('testcsv.csv','rt', encoding="utf-8")
  File "C:\Python27\lib\codecs.py", line 896, in open
    file = __builtin__.open(filename, mode, buffering)
ValueError: Invalid mode ('rtb')
Process finished with exit code 1

Не пойму почему он ругается на режим чтения. При открытии с определением кодировки нужно считывать файл в другом режиме?


Код
import re
import codecs
i_file = codecs.open('testcsv.csv','rt', encoding="utf-8")
txt = ''
for row in i_file:
     txt += row
txt = re.sub(r'[А-я]+', '1', txt)
print(txt)

Отредактировано coffe4wolf (Июнь 8, 2016 11:51:28)

Офлайн

#6 Июнь 8, 2016 12:04:51

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

CSV-файл - определение и изменение кодировки

Вы бы уже сам файлик приложили кусочек?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#7 Июнь 8, 2016 12:10:12

coffe4wolf
Зарегистрирован: 2016-04-21
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

CSV-файл - определение и изменение кодировки

Тащемта вот мучаемый файл

Прикреплённый файлы:
attachment testcsv.csv (45,8 KБ)

Офлайн

#8 Июнь 8, 2016 14:17:02

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

CSV-файл - определение и изменение кодировки

import csv
res_list = []
with open('testcsv.csv', 'rt') as i_file:
    txt = csv.reader(i_file)
    for i in txt:
        data = str(i[0].decode("cp1251").encode("utf8")).replace(';', '')
        if data:
            res_list.append(data)
print ','.join(res_list)

:: ФИОПервый приходПоследний уход,Boscolo L.,Munhos de Campos E.,Абашидзе А.А.,Абдураимова У.З.,Абрамов Д.А.,Абрамов Е.Н.,Абрамов

print res_list[10]
:: Абрамова П.Б.

for i in res_list:
    print i

ФИОПервый приходПоследний уход
Boscolo L.
Munhos de Campos E.
Абашидзе А.А.
Абдураимова У.З.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#9 Июнь 8, 2016 17:16:48

coffe4wolf
Зарегистрирован: 2016-04-21
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

CSV-файл - определение и изменение кодировки

ZerG
О, таки ништяк.
Однако у меня пайчам всё равно выводит фигню

Прикреплённый файлы:
attachment вывод.jpg (54,3 KБ)

Офлайн

#10 Июнь 8, 2016 19:34:34

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

CSV-файл - определение и изменение кодировки

Ну так давайте разберемся? Какая у вас ос? Какая кодировка?
Покажите код? Шрифт опять же - далеко не все поддерживают русские. Попробуйте Consolas для консоли поставить и так далее?

Опять же настройки кодировки в пишарме?
Что если запустить скрипт из консоли?
Что если дописать 5 строк кода и полученные данные сохранить в текстовый файл а пото открыть его каким то редактором?

Вы видите как много “что если”?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Отредактировано ZerG (Июнь 8, 2016 19:36:10)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version