LINUX.ORG.RU

русские имена в файл на питоне


0

0

собственно сабж. проблема в том что не могу записать в файл русские именна файлов. или подскажите как быть что то вообще невкуриваю. вот текст:

import os, sys, string, codecs

f = open('data.txt', 'w') for root, dirs, files in os.walk('C:\\Proj'): string = root.decode('cp1251') f.write(root) f.write(string.encode('cp1251')) f.write('ыфвфыв'.decode('cp1251')) f.close()

anonymous

Где traceback?

Скорее всего ошибка в write(xxx.decode()) - вряд ли она догадывается о правильной кодировке выходного файла. Посему стоит убрать лишние .decode или добавить недостающие .encode.

DonkeyHot ★★★★★
()

Я так понял string у тебя юникодный?
Два вопроса тогда, а на хуя (или в винде для русского языка добавили
пару кодировок); string и codec довольно интересный импорт -
использовать unicode для получения юникодной строки не проще?

Я бы работал так:
import sys

loc_charset = sys.getfilesystemencoding()
f = open('data.txt', 'w')
for root, dirs, files in os.walk('C:\\Proj'):
string = unicode(root loc_charset)
f.write(root)
f.write(string.encode(loc_charset))
# что это 'ыфвфыв' я не знаю...
# f.write('ыфвфыв'.decode(loc_charset))
f.close()

anonymous
()
Ответ на: комментарий от anonymous

Спасибо за ответ. я вообще не знаю - уникодный у меня стринг или нет - ну ботаник я(надеюсь пока). а зачем в питоне придумали decode и encode - фактически одно и тоже - кодировку ведь сам в скобках указываешь. А проблему решил могет не так красиво, но работает. Дело в том что русский стринг("фывфы") питон нормально записывает в файл - даже не спрашивая о кодировке, проблемы возникают когда он список из стрингов пытается записать. поэтому пришлось список делть на стринг и каждый из нех поотдельности записывать в файл. и что за формать такой mbcs - это выводит sys.getfilesystemencoding()?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.