Найти - Пользователи
Полная версия: CSV-файл - определение и изменение кодировки
Начало » Python для новичков » CSV-файл - определение и изменение кодировки
1 2 3 4
coffe4wolf
В наличии 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))
doza_and
coffe4wolf
Однако возникла проблема. Сырой вывод через print(repr())
1. Проблема не в принте. Открывать файл надо с указанием его кодировки.
i_file = open('testcsv.csv','rt',encoding="utf-8")
зачем
import csv
Вы это не используете. Это мусор.
Зачем собирать файл в строку кода вы строки хотите выкидывать. Применяйте регулярные выражения к строкам
coffe4wolf
doza_and
doza_and
1. Проблема не в принте. Открывать файл надо с указанием его кодировки.

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

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

doza_and
зачем

import csv
Осталось с прошлой версии скрипта, забыл удалить
doza_and
coffe4wolf
Но ведь у open нет атрибута encoding о.О
https://docs.python.org/3/library/functions.html#open
есть.
Если речь идет о python2.x то там есть модуль codecs.
coffe4wolf
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)
ZerG
Вы бы уже сам файлик приложили кусочек?
coffe4wolf
Тащемта вот мучаемый файл
ZerG
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.
Абашидзе А.А.
Абдураимова У.З.
coffe4wolf
ZerG
О, таки ништяк.
Однако у меня пайчам всё равно выводит фигню

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

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

Вы видите как много “что если”?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB