Найти - Пользователи
Полная версия: Список фраз, нужно создать список фраз с заменой слов во фразе на сино
Начало » Центр помощи » Список фраз, нужно создать список фраз с заменой слов во фразе на сино
1 2 3 4 5
py.user.next
AleksSR
Сделал
сразу сюда новый вариант копируй
в каком виде сейчас цикл ?

AleksSR
Можно ли работать с текстовыми файлами в cp-1251 кодировке для реализации данной задачи?
пока что нужно правильно вывести то, что в utf-8
с cp1251 будет та же фигня, так как консоль использует cp866
>>> 'абвг'.encode('cp1251').decode('cp866')
'рсту'
>>>
utf-8 шире, чем cp1251, так как позволяет закодировать любой символ юникода, тогда как cp1251 может кодировать только 256 символов
но многие виндовые программы поддерживают cp1251
не помню точно, но, вроде бы, бывали программы, которые поддерживали cp1251 и koi8-r, но не поддерживали utf-8
если у тебя только русские и анлийские буквы в файле, тогда cp1251 подойдёт
AleksSR
py.user.next
AleksSR
Сделал
сразу сюда новый вариант копируй
в каком виде сейчас цикл ?
def load_rules(ifname):
rules_lst = []
with open(ifname) as f:
for line in f:
print line.decode('cp866')
continue
lst = line.strip().split(';')
name = lst[1].lower()
expr_from = lst[0].strip('()')
sublst_to = lst[2].strip('()').split('|')
rules_lst.append([name, expr_from, sublst_to])
return rules_lst
py.user.next
проверил в винде на третьем питоне:
нужно файл с текстом сохранить в utf-8 без bom (notepad++ даёт это сделать)
а выводить нужно через print line.decode('utf-8')
на третьем питоне аналогичное сработало и вывело в консоль русские
AleksSR
py.user.next
проверил в винде на третьем питоне:
нужно файл с текстом сохранить в utf-8 без bom (notepad++ даёт это сделать)
а выводить нужно через print line.decode('utf-8')
на третьем питоне аналогичное сработало и вывело в консоль русские
Сделал, вот что выводится:

(2007|2008|2009|09|2010|2011|2012);GOD;2010|2011|2012

(лето|осень|зима|весна);SEZON;осень|зима

(интернет магазин|интернет-магазин|магазин);MAGAZIN;интернет магазин|интернет-ма
газин|магазин
Traceback (most recent call last):
File “C:\Python26\Scripts\Words classification\equiv.py”, line 44, in <module>

out_lst = repl_group(text, rules_lst)
IndexError: list index out of range

C:\Python26\Scripts\Words classification>

Полный код используемого скрипта:
# -*- coding: utf-8 -*-

import re

textfile = 'file.txt'
rulesfile = 'rules.txt'
outfile = 'output.txt'

def load_rules(ifname):
rules_lst = []
with open(ifname) as f:
for line in f:
print line.decode('utf-8')
continue
lst = line.strip().split(';')
name = lst[1].lower()
expr_from = lst[0].strip('()')
sublst_to = lst[2].strip('()').split('|')
rules_lst.append([name, expr_from, sublst_to])
return rules_lst

#for r in load_rules(rulesfile):
# print r

def load_text(ifname):
with open(ifname) as f:
return next(f).strip()

#print load_text(textfile)

def repl_group(text, rule):
lst = []
expr, to_lst = rule[1:]
for tw in to_lst:
repl = re.sub(expr, tw, text)
lst.append(repl)
return lst

#print repl_group('abcd', [None, 'a|c', ['1', '2', '3']])

rules_lst = load_rules(rulesfile)
text = load_text(textfile)

out_lst = repl_group(text, rules_lst[0])
for t in (i for i in repl_group(text, rules_lst[2]) if i not in out_lst):
out_lst.extend(repl_group(t, rules_lst[0]))

out_lst = [i.decode('utf-8') for i in out_lst]

print u'; '.join(out_lst)
py.user.next
теперь эти две введённые строки закомментируй (print и continue)
AleksSR
py.user.next
теперь эти две введённые строки закомментируй (print и continue)
Вывод:
интернет магазин телевизоров 2010; интернет магазин телевизоров 2011; интернет м
агазин телевизоров 2012; интернет-магазин телевизоров 2010; интернет-магазин тел
евизоров 2011; интернет-магазин телевизоров 2012; магазин телевизоров 2010; мага
зин телевизоров 2011; магазин телевизоров 2012

C:\Python26\Scripts\Words classification>
py.user.next
out_lst = [i.decode('utf-8') for i in out_lst]
print u'; '.join(out_lst)

with open(outfile, 'w') as f:
print >>f, u'; '.join(out_lst).encode('utf-8')
AleksSR
Не подскажите можно ли в данном случае решить проблему с кодировкой? Хотелось бы, чтобы ввод и вывод были в cp-1251, так как вывод идет в csv файл и в дальнейшем человек будет в ручную корректировать список запросов, а csv в кодировке utf-8 открывается с крокозябрами в экселе.
py.user.next
файлы file.txt, rules.txt сохраняются в cp1251
в коде все utf-8 в кавычках меняются на cp1251
а кодировка в начале скрипта если меняется на cp1251, то нужно и сам скрипт сохранить в cp1251
AleksSR
Кодировки пока еще не стал менять. Почему скрипт обрабатывает и записывает в выходной файл только первую строчку из исходного файла?
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