Уведомления

Группа в Telegram: @pythonsu

#1 Май 17, 2015 22:42:30

NickYork
Зарегистрирован: 2015-05-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

как правильно работать с кириллицей при записи в текстовый файл

a = Строка кириллицей
print a - печатает текст
f.write(a) - шестнадцатиричные коды
Какое нужно преобразование, чтобы получить читаемый текстовый файл вместо кодов?

Офлайн

#2 Май 17, 2015 23:05:21

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

как правильно работать с кириллицей при записи в текстовый файл

вы или текстовый файл неправильно открываете
может редактор не знает кодировку
или неправильно открываете файл для записи
скиньте файл с шестнадцатеричными кодами
и код
и напишите какая версия пайтона и ос



————————————————
-*- Simple is better than complex -*-

Офлайн

#3 Май 17, 2015 23:14:08

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

как правильно работать с кириллицей при записи в текстовый файл

NickYork
Какое нужно преобразование
Никакого. В том средстве которым файл смотрите выставьте правильную кодировку содержимого.
А вообще правило такое:
1 в начале питон скрипта указываете кодировку скрипта.
#!/usr/bin/env python
# -*- coding: utf-8-*-
При этом естественно надо следить чтобы текстовый редактор которым вы пользуетесь записал текст именно в указанной кодировке.

2. Поскольку у вас питон 2 то лучше сразу заставить питон перевести ваш строковый литерал в юникод

a = u"Строка кириллицей"

3 Если вы хотите другую кодировку то для питона 2
можете или перекодировать данные перед записью
f.write(a.encode("utf-8"))
Или поручить это драйверу записи в файл
import codecs
f=codecs.open("...","w",encoding="utf-8")
f.write(a)
Если вы не проделаете все это явно, то питон попробует догадаться чего вы хотите на основе установок системной локали и прочих премудростей… Его мнение и ваше желание естественно могут не совпасть.

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




Отредактировано doza_and (Май 17, 2015 23:22:09)

Офлайн

#4 Май 17, 2015 23:19:35

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

как правильно работать с кириллицей при записи в текстовый файл

Только сейчас другому челу объяснял. :)
под виндой с русской локалью:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import codecs
a="русское"
with open("aa.dat","w") as f:
    f.write(a)
Пишет utf-8 (т.е. содержимое строки)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import codecs
a=u"русское"
with open("aa.dat","w") as f:
    f.write(a)
Traceback (most recent call last):
  File "C:\PROJECTS\egor_petrov\mcu_new\aaa\a.py", line 7, in <module>
    f.write(a)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import codecs
a=u"русское"
with codecs.open("aa.dat","w",encoding="utf-8") as f:
    f.write(a)
опять нормально пишет utf-8

Рекомендую всегда явно указывать кодировку, причем utf-8. помогает при переносе файлов между разными ОС

Есть еще одно очень простое и очень действенное секретное средство - ВНИМАНИЕ!!! - начинающим рекомендую не писать по русски ни в файл ни в скрипт ни на консоль ни создавать файлы с русскими именами и упаси боже создать в винде пользователя с русским именем.



Отредактировано doza_and (Май 17, 2015 23:31:13)

Офлайн

#5 Май 17, 2015 23:34:32

NickYork
Зарегистрирован: 2015-05-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

как правильно работать с кириллицей при записи в текстовый файл

Python 2.7 Windows/Xp
В данном коде s - вложенные списки с текстами
В файл ничего не пишется, а печать через lsprint() (процедура распечатки списка строк через print)
на экран проходит нормально
############################
# main module
import a5
s=a5.main()
f=open('cpmod/rapt/ex.txt','w')
for i in range(len(s)):
f.write(s)
f.close
a5.lsprint (s)

Офлайн

#6 Май 17, 2015 23:40:30

NickYork
Зарегистрирован: 2015-05-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

как правильно работать с кириллицей при записи в текстовый файл

В программе ничего кириллицей не пишу, кроме констант, кодировка одинаковая
а программа предназначена для анализа русских текстов.

Офлайн

#7 Май 17, 2015 23:54:05

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

как правильно работать с кириллицей при записи в текстовый файл

for i in range(len(s)):
    f.write(s)
этот код ничего полезного не делает
а переписывает файл n-ое количество раз

ваш первый пост отличается от второго
не понятно чего же вы хотите



————————————————
-*- Simple is better than complex -*-

Офлайн

#8 Май 18, 2015 00:06:56

NickYork
Зарегистрирован: 2015-05-17
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

как правильно работать с кириллицей при записи в текстовый файл

Там код был посложнее. Почему-то индексы пропали.
Спасибо за советы. Буду разбираться дальше.

Офлайн

#9 Май 18, 2015 20:24:58

codersed
Зарегистрирован: 2015-05-13
Сообщения: 9
Репутация: +  1  -
Профиль   Отправить e-mail  

как правильно работать с кириллицей при записи в текстовый файл

import codecs
file = codecs.open('D:/filename.txt', 'w', 'utf-8')
file.write('Привет')
file.close()

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version