Форум сайта python.su
0
Считываю имена файлов книг на русском. И вот есть строка
tree = os.walk('./qwer/') for d,dirs,files in tree: for f in files: print f discribe = { 'title': f, 'author': u"Агата Кристи",
base = {'id': id, 'discribe':discribe} db_file_path = './data/db/%d.txt' % id json.dump(base, open(db_file_path, "wt"))

'title': u"%s" % f,

Офлайн
0
Очень нужно! Если еще нужно что-то код, скрины, скажите)
Офлайн
61
Конечно давайте код!
Но на вскидку вы у вас проблема после json.dumps
выведите принтом данные до и после
Офлайн
0
Ага, понял) Обычно привожу все с первого разу нужное) Туплю) Извините.
И так - есть код:
add.py
# -*- coding: utf-8 -*- import os import os.path import json from shutil import copy2 properties = json.load(open("./data/preferences.txt")) tree = os.walk('./qwer/') for d,dirs,files in tree: for f in files: print (f) discribe = { 'title': f, 'author': u"Агата Кристи", 'year': 1000, 'pages': 10000, 'kind': u"Детектив", 'note': u"Вне либо-каких серий, типа Марпл или Пуаро." } if discribe['title'] and discribe['author'] and discribe['kind']: id = properties['id']+1 kind = properties['kind'] name_book = f new_path = './data/books/%d_%s' % (id, name_book) copy2(os.path.join(d, f), new_path) base = {'id': id, 'discribe':discribe} db_file_path = './data/db/%d.txt' % id json.dump(base, open(db_file_path, "wt")) if not(discribe['kind'] in kind): kind.append(discribe['kind']) properties['kind'] = kind properties['id'] += 1 json.dump(properties, open('./data/preferences.txt', 'wt')) raw_input()


{"kind": ["\u0414\u0435\u0442\u0435\u043a\u0442\u0438\u0432"], "id": 9}
{"id": 10, "discribe": {"kind": "\u0414\u0435\u0442\u0435\u043a\u0442\u0438\u0432", "author": "\u0410\u0433\u0430\u0442\u0430 \u041a\u0440\u0438\u0441\u0442\u0438", "title":
Офлайн
0
Так можно декодировать в текущую кодировку системы.
Может поможет…
import sys code = sys.stdout.encoding str.decode(code)
Офлайн
0
lastnowemberБольшое спасибо! Пошло!
Так можно декодировать в текущую кодировку системы. Может поможет…
# -*- coding: utf-8 -*- import os import os.path import json import sys from shutil import copy2 code = sys.stdout.encoding properties = json.load(open("./data/preferences.txt")) tree = os.walk('./qwer/') for d,dirs,files in tree: for f in files: print (f) discribe = { 'title': f.decode(code), 'author': u"Агата Кристи", 'year': 1000, 'pages': 10000, 'kind': u"Детектив", 'note': u"Вне либо-каких серий, типа Марпл или Пуаро." } if discribe['title'] and discribe['author'] and discribe['kind']: id = properties['id']+1 kind = properties['kind'] name_book = f new_path = './data/books/%d_%s' % (id, name_book) copy2(os.path.join(d, f), new_path) base = {'id': id, 'discribe':discribe} db_file_path = './data/db/%d.txt' % id json.dump(base, open(db_file_path, "wt")) if not(discribe['kind'] in kind): kind.append(discribe['kind']) properties['kind'] = kind properties['id'] += 1 json.dump(properties, open('./data/preferences.txt', 'wt')) raw_input()
# -*- coding: utf-8 -*-
Отредактировано A.N.Onim (Фев. 20, 2016 14:10:19)
Офлайн
0
A.N.Onim
Я сам новичок и бился над подобной проблемой, когда пытался получить выходные данные из команды ping. Он выводит их в типе данных bytes, при этом utf-8 и прочие спотыкаются все это декодировать. Почему так, не знаю, но думаю, что title он получал извне и выдавал его в bytes, остальное в string задано было явно. Как-то так… 
Офлайн
0
Вот - может кому понадобится - две хорошие статьи на Хабре(хотя не все понятно :-) ):
Офлайн