Найти - Пользователи
Полная версия: Запись кириллицы в файл и чтение из него.
Начало » Python для новичков » Запись кириллицы в файл и чтение из него.
1
Dobrodel
Все здравствуйте!
Знаю, что тема уже обсуждалась много раз, но я так и не смог победить свою задачу. Если есть возможность подскажите пожалуйста как решить ее:
# -*- 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']]

Необходимо, чтобы записалось в файл на читаемом русском и так же из него считалось. Подскажите пожалуйста как это сделать?
doza_and
для 2.x
import codecs
data = [[u'Пример 1'], [u'Пример 2'], [u'Пример 3']]
with codecs.open("some.name","w",coding="utf-8") as f:
    f.write(....)

надо указывать что строки в юникоде и кодировку при записи в файл
Dobrodel
Благодарю за ответ
Только список наполняется из внешнего источника и я не ведаю как подставить туда буковку u.
py.user.next
>>> 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']]
>>>
Dobrodel
py.user.next, подскажите пожалуйста что Вы имели ввиду своим предыдущим сообщением? Я, возможно, в силу отсутствия своих некоторых компетенций, так и не смог понять его предназначение.
Это как то поможет мне решить поставленный вопрос в данной теме?
py.user.next
Файл пишется и читается правильно. Дело в отображении строк с кириллицей. Это особенность второго питона.

Если 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])
Пример ['Пример']
>>>
Dobrodel
Ясно, благодарю.
Помогло.
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