Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 25, 2014 13:15:42

Dobrodel
Зарегистрирован: 2014-09-24
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись кириллицы в файл и чтение из него.

Все здравствуйте!
Знаю, что тема уже обсуждалась много раз, но я так и не смог победить свою задачу. Если есть возможность подскажите пожалуйста как решить ее:

# -*- coding: utf-8 -*-
fileName = '/Users/adam/Downloads/test.txt'
data = [['Пример 1'], ['Пример 2'], ['Пример 3']]
fm = open( fileName, 'wb' )
fm.write( str( data ) )
fm.close()
fd = open( fileName, 'rb' )
data = fd.read()
fd.close()
print data
Результат:
[['\xd0\x9f\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80 1'], ['\u041f\u0440\u0438\u043c\u0435\u0440 2'], ['\xd0\x9f\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80 3']]

Необходимо, чтобы записалось в файл на читаемом русском и так же из него считалось. Подскажите пожалуйста как это сделать?

Отредактировано Dobrodel (Окт. 25, 2014 13:16:33)

Офлайн

#2 Окт. 25, 2014 16:11:22

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

Запись кириллицы в файл и чтение из него.

для 2.x

import codecs
data = [[u'Пример 1'], [u'Пример 2'], [u'Пример 3']]
with codecs.open("some.name","w",coding="utf-8") as f:
    f.write(....)

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



Офлайн

#3 Окт. 25, 2014 18:06:05

Dobrodel
Зарегистрирован: 2014-09-24
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись кириллицы в файл и чтение из него.

Благодарю за ответ
Только список наполняется из внешнего источника и я не ведаю как подставить туда буковку u.

Офлайн

#4 Окт. 25, 2014 20:00:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9796
Репутация: +  849  -
Профиль   Отправить e-mail  

Запись кириллицы в файл и чтение из него.

>>> data = [['Пример 1'], ['Пример 2'], ['Пример 3']]
>>> data
[['\xd0\x9f\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80 1'], ['\xd0\x9f\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80 2'], ['\xd0\x9f\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80 3']]
>>>



Офлайн

#5 Окт. 26, 2014 04:27:05

Dobrodel
Зарегистрирован: 2014-09-24
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись кириллицы в файл и чтение из него.

py.user.next, подскажите пожалуйста что Вы имели ввиду своим предыдущим сообщением? Я, возможно, в силу отсутствия своих некоторых компетенций, так и не смог понять его предназначение.
Это как то поможет мне решить поставленный вопрос в данной теме?

Офлайн

#6 Окт. 26, 2014 06:21:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9796
Репутация: +  849  -
Профиль   Отправить e-mail  

Запись кириллицы в файл и чтение из него.

Файл пишется и читается правильно. Дело в отображении строк с кириллицей. Это особенность второго питона.

Если print нет, то применяется функция repr(), которая возвращает недвусмысленную строку.

>>> s = "Пример"
>>> s
'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80'
>>> print s
Пример
>>> s = u"Пример"
>>> s
u'\u041f\u0440\u0438\u043c\u0435\u0440'
>>> print s
Пример
>>>

Когда строка в списке, при выполнении оператора print для этого списка выводится представление строки.

>>> s = "Пример"
>>> print s, [s]
Пример ['\xd0\x9f\xd1\x80\xd0\xb8\xd0\xbc\xd0\xb5\xd1\x80']
>>>
>>> s = u"Пример"
>>> print s, [s]
Пример [u'\u041f\u0440\u0438\u043c\u0435\u0440']
>>>

Чтобы вывести строку, нужно её вытащить из списка.

>>> s = "Пример"
>>> print [s][0]
Пример
>>>

А это для третьего питона. В нём таких проблем нет.
>>> s = 'Пример'
>>> print(s, [s])
Пример ['Пример']
>>>



Отредактировано py.user.next (Окт. 26, 2014 06:33:21)

Офлайн

#7 Окт. 26, 2014 06:44:30

Dobrodel
Зарегистрирован: 2014-09-24
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись кириллицы в файл и чтение из него.

Ясно, благодарю.
Помогло.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version