Найти - Пользователи
Полная версия: Проблема с кодировкой
Начало » Python для новичков » Проблема с кодировкой
1 2
IVZ
Питон изучаю уже целый день, так что можно сказать, что я продвинутый программер на питоне Но вот незадача - не получается вывести данные в файл в нормальном виде.
Приведу часть кода
         item_data = {
            'title_ru': title_ru,
            'title_en': title_en,
            'rate': (rate_percent / 10),
            'year': year,
            'date_rated': normalize_date(date_rated),
            'date_watched': normalize_date(date_watched),
            'details_url': details_url
        }
        rates.append(item_data)
open(OUTPUT_FILENAME, 'w') as f:
        pickle.dump(get_rates(URL_RATES_ALL, True), f)
На выходе получается нечто вроде
\xd1\xe5\xf0\xfc\xb8\xe7\xed\xfb\xe9 \xf7\xe5\xeb\xee\xe2\xe5\xea
Как получить читаемый результат?

ПС: питон 2.7. Запускаю из-под вин7
sp3
pickle.dump - с чего вы решили что там будут читаемые символы?
IVZ
Мопед скрипт не мой, я просто пытаюсь запустить готовый скрипт на своём компе.
Исходники тут. Насколько я понимаю, у автора всё работает.
https://github.com/idlesign/imhodump
Думаю, тут дело в системе. Скорее всего автор запускал его на никсах, а у меня окошки. Не мне вам рассказывать, что у них разные системные кодировки.
4kpt
IVZ
Вам же написал sp3. Модуль pickle пакует объекты по своим внутренним алгоритмам. При открытии файла любого расширения получится чушь и это нормально. Чтобы получить данные нужно отркрыть файл для чтения и сделать data = pickle.load(ссылка_на_файловый_объект). В результате data станет ссылкой на “задампированный” (или сохраненный) предварительно объект.

Если Вы хотите просто сохранить строчки текста, то можно применить следующий механизм

file_ = open("data.txt", "w")
file_.write(str(object_to_save))

object_to_save - ссылка на объект для сохранения (или просто переменная).

Здесь мы обарачиваем любой питонячий объект и превращаем его в строку.
IVZ
4kpt
IVZВам же написал sp3. Модуль pickle пакует объекты по своим внутренним алгоритмам. При открытии файла любого расширения получится чушь и это нормально. Чтобы получить данные нужно отркрыть файл для чтения и сделать data = pickle.load(ссылка_на_файловый_объект). В результате data станет ссылкой на “задампированный” (или сохраненный) предварительно объект. Если Вы хотите просто сохранить строчки текста, то можно применить следующий механизм
Заменил вывод на вашу конструкцию. Только добавил file_.close().
Результат вытянулся в одну строку, нечитаемый код остался
4kpt
Давайте файл, гляну :)
+ если можно дайте полный код в файле…
IVZ
Я чуть выше давал ссылку на скрипт
IVZ
Насколько я понимаю, у автора всё работает. https://github.com/idlesign/imhodump
Я в том скрипте только поменял 'http://idle.imhonet.ru/content/films/rates/all/' на 'http://antony713.imhonet.ru/content/films/rates/all/'
4kpt
У меня получилось так.
Поменяйте строки:

if __name__ == '__main__':
    with open(OUTPUT_FILENAME, 'w') as f:
        pickle.dump(get_rates(URL_RATES_ALL, True), f)

На строки:

if __name__ == '__main__':
    with open(OUTPUT_FILENAME, 'w') as file_:
        for film in get_rates(URL_RATES_ALL, False):
            for param in film:
                line = "%s: %s\n" %(param, film[param])
                file_.write(str(line).decode("utf-8").encode("cp1251"))
            file_.write("-------------------\n")

P.S. Python 2.7, windows XP….
IVZ
Работает. И как я сразу до этого не догадался?!
IVZ
Только теперь на следующие страницы не переходит.
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