Форум сайта python.su
В наличии 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)
Офлайн
coffe4wolf1. Проблема не в принте. Открывать файл надо с указанием его кодировки.
Однако возникла проблема. Сырой вывод через print(repr())
i_file = open('testcsv.csv','rt',encoding="utf-8")
import csv
Офлайн
doza_and
doza_and
1. Проблема не в принте. Открывать файл надо с указанием его кодировки.
i_file = open('testcsv.csv','rt',encoding=“utf-8”)
doza_andОсталось с прошлой версии скрипта, забыл удалить
зачем
import csv
Офлайн
coffe4wolfhttps://docs.python.org/3/library/functions.html#open
Но ведь у open нет атрибута encoding о.О
Офлайн
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)
Офлайн
Вы бы уже сам файлик приложили кусочек?
Офлайн
Тащемта вот мучаемый файл
Прикреплённый файлы: testcsv.csv (45,8 KБ)
Офлайн
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)
print res_list[10]
for i in res_list: print i
Офлайн
ZerG
О, таки ништяк.
Однако у меня пайчам всё равно выводит фигню
Прикреплённый файлы: вывод.jpg (54,3 KБ)
Офлайн
Ну так давайте разберемся? Какая у вас ос? Какая кодировка?
Покажите код? Шрифт опять же - далеко не все поддерживают русские. Попробуйте Consolas для консоли поставить и так далее?
Опять же настройки кодировки в пишарме?
Что если запустить скрипт из консоли?
Что если дописать 5 строк кода и полученные данные сохранить в текстовый файл а пото открыть его каким то редактором?
Вы видите как много “что если”?
Отредактировано ZerG (Июнь 8, 2016 19:36:10)
Офлайн