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

terabayt
вы или текстовый файл неправильно открываете
может редактор не знает кодировку
или неправильно открываете файл для записи
скиньте файл с шестнадцатеричными кодами
и код
и напишите какая версия пайтона и ос
doza_and
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
Только сейчас другому челу объяснял. :)
под виндой с русской локалью:
#!/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. помогает при переносе файлов между разными ОС

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

NickYork
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)
NickYork
В программе ничего кириллицей не пишу, кроме констант, кодировка одинаковая
а программа предназначена для анализа русских текстов.
terabayt
for i in range(len(s)):
    f.write(s)
этот код ничего полезного не делает
а переписывает файл n-ое количество раз

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

NickYork
Там код был посложнее. Почему-то индексы пропали.
Спасибо за советы. Буду разбираться дальше.
codersed
import codecs
file = codecs.open('D:/filename.txt', 'w', 'utf-8')
file.write('Привет')
file.close()
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