Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 26, 2013 18:34:56

pulya
Зарегистрирован: 2013-10-26
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярные кирилица [а-я] , питон 2.7

запускаю питон 2.7 ( питон 3 нет возможности использовать) с помощью команды
python file.py in.txt

в файле in.txt находятся русские символы ( кирилица) и английские символы
мне необходимо обработать их с помощью регулярных выражений.
я знаком с тем что в питоне 2.7 еще не было юникода и надо ВСЕ перевести в него ( и регулярку, и сам текст). Поэтому мне нужно понять, где у меня ошибка при переводе в юникод.

ниже текст скрипта file.py

#coding: utf-8 
# load modules
import re
import sys
#import codecs
# read file, write file
a = open(sys.argv[1],"r")
s = a.readline()
s = unicode(s, 'utf8')
regexp = re.compile(u"[а-яА-ЯёЁa-zA-Z0-9]", flags=re.I + re.U)
tt = re.findall(regexp, s)
num = len(tt)
c=0
b = open('/home/mimino/pyliyt.txt', 'w')
while c < num:
	h=(tt[c]+':')
	h=h.strip()
	h=h.encode('utf8')
	b.writelines((h)+'\n')
	c+=1
# close files
try:
  a.close()
  b.close()
finally:
  print "all done"


ошибка выдается следующая

  File "file.py", line 13
    regexp = re.compile(u"[▒-▒▒-߸▒a-zA-Z0-9]",flags=re.I + re.U)
SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xe0 in position 0: unexpected end of data

Отредактировано pulya (Окт. 26, 2013 18:36:47)

Офлайн

#2 Окт. 26, 2013 18:55:03

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

регулярные кирилица [а-я] , питон 2.7

файл точно в utf-8 ?

Офлайн

#3 Окт. 26, 2013 18:55:09

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

регулярные кирилица [а-я] , питон 2.7

pulya
еще не было юникода
Улыбнуло.
pulya
( и регулярку, и сам текст)
И еще текст программы. Похоже что кодировка питоновского файла не соответствует. Ваш код у меня нормально ломается.



Офлайн

#4 Окт. 26, 2013 19:15:01

pulya
Зарегистрирован: 2013-10-26
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярные кирилица [а-я] , питон 2.7

bismigalis
файл точно в utf-8 ?

исходный файл in.txt (я вижу что он действительно в utf-8 )

Прикреплённый файлы:
attachment in.txt (117 байт)

Офлайн

#5 Окт. 26, 2013 19:19:00

pulya
Зарегистрирован: 2013-10-26
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярные кирилица [а-я] , питон 2.7

doza_and

вы были несомненно правы!

я редактировал питоновский файл в 1251

сейчас я сменил на utf-8 и отредактировал его.
после чего запустил и скрипт действительно отработал по кодировке.


и в итоге на выходе я получил также utf-8
(прикрепил в атаче)


но) я сейчас страдаю над уже следующей проблемой:
на выходном файле видно, что у меня каждая строчка состоит из символа, хотя я же искал регулярным выражением слово. Поправьте пожалуйста грешника.

Прикреплённый файлы:
attachment pyliyt.txt (188 байт)

Офлайн

#6 Окт. 26, 2013 19:30:40

pulya
Зарегистрирован: 2013-10-26
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярные кирилица [а-я] , питон 2.7

сам поправил свой код

ошибочная строка

regexp = re.compile(u"[а-яА-ЯёЁa-zA-Z0-9]", flags=re.I + re.U)

правильная строка
regexp = re.compile(u"[а-яА-ЯёЁa-zA-Z0-9]\w+", flags=re.I + re.U)


и тогда будут искаться слова с цифрами, или просто цифры.

всем спасибо!

Офлайн

#7 Окт. 26, 2013 20:04:54

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

регулярные кирилица [а-я] , питон 2.7

pulya

Ты понимаешь, что значат эти флаги ?

re.I + re.U



Офлайн

#8 Окт. 26, 2013 20:09:34

pulya
Зарегистрирован: 2013-10-26
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярные кирилица [а-я] , питон 2.7

Budulianin
pulyaТы понимаешь, что значат эти флаги ?

re.I регистр игнорируется
re.U используется юникод


вопрос я понял с намеком
т.е. можно уменьшить мое регулярное выражение, верно?

Офлайн

#9 Окт. 26, 2013 20:15:42

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

регулярные кирилица [а-я] , питон 2.7

pulya

Или флаг убрать



Офлайн

#10 Окт. 26, 2013 20:30:17

pulya
Зарегистрирован: 2013-10-26
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

регулярные кирилица [а-я] , питон 2.7

Budulianin

я бы хотел флаги оставить, и уменьшить регулярку.
т.е. оптимизировать код, сделать его красивее.

подскажите пожалуйста как это корректно сделать.

низко кланяюсь.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version