Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 6, 2013 14:04:54

IVZ
Зарегистрирован: 2013-09-06
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с кодировкой

Питон изучаю уже целый день, так что можно сказать, что я продвинутый программер на питоне Но вот незадача - не получается вывести данные в файл в нормальном виде.
Приведу часть кода

         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

Отредактировано IVZ (Сен. 6, 2013 14:20:15)

Офлайн

#2 Сен. 6, 2013 16:47:49

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Проблема с кодировкой

pickle.dump - с чего вы решили что там будут читаемые символы?



Отредактировано sp3 (Сен. 6, 2013 16:48:25)

Офлайн

#3 Сен. 6, 2013 19:18:17

IVZ
Зарегистрирован: 2013-09-06
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с кодировкой

Мопед скрипт не мой, я просто пытаюсь запустить готовый скрипт на своём компе.
Исходники тут. Насколько я понимаю, у автора всё работает.
https://github.com/idlesign/imhodump
Думаю, тут дело в системе. Скорее всего автор запускал его на никсах, а у меня окошки. Не мне вам рассказывать, что у них разные системные кодировки.

Офлайн

#4 Сен. 6, 2013 19:59:19

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Проблема с кодировкой

IVZ
Вам же написал sp3. Модуль pickle пакует объекты по своим внутренним алгоритмам. При открытии файла любого расширения получится чушь и это нормально. Чтобы получить данные нужно отркрыть файл для чтения и сделать data = pickle.load(ссылка_на_файловый_объект). В результате data станет ссылкой на “задампированный” (или сохраненный) предварительно объект.

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

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

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

Здесь мы обарачиваем любой питонячий объект и превращаем его в строку.



Отредактировано 4kpt (Сен. 6, 2013 20:00:23)

Офлайн

#5 Сен. 6, 2013 22:42:32

IVZ
Зарегистрирован: 2013-09-06
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с кодировкой

4kpt
IVZВам же написал sp3. Модуль pickle пакует объекты по своим внутренним алгоритмам. При открытии файла любого расширения получится чушь и это нормально. Чтобы получить данные нужно отркрыть файл для чтения и сделать data = pickle.load(ссылка_на_файловый_объект). В результате data станет ссылкой на “задампированный” (или сохраненный) предварительно объект. Если Вы хотите просто сохранить строчки текста, то можно применить следующий механизм
Заменил вывод на вашу конструкцию. Только добавил file_.close().
Результат вытянулся в одну строку, нечитаемый код остался

Офлайн

#6 Сен. 7, 2013 01:05:06

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Проблема с кодировкой

Давайте файл, гляну :)
+ если можно дайте полный код в файле…



Офлайн

#7 Сен. 7, 2013 13:42:55

IVZ
Зарегистрирован: 2013-09-06
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с кодировкой

Я чуть выше давал ссылку на скрипт

IVZ
Насколько я понимаю, у автора всё работает. https://github.com/idlesign/imhodump
Я в том скрипте только поменял 'http://idle.imhonet.ru/content/films/rates/all/' на 'http://antony713.imhonet.ru/content/films/rates/all/'

Офлайн

#8 Сен. 7, 2013 15:23:51

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Проблема с кодировкой

У меня получилось так.
Поменяйте строки:

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….



Офлайн

#9 Сен. 7, 2013 16:33:17

IVZ
Зарегистрирован: 2013-09-06
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с кодировкой

Работает. И как я сразу до этого не догадался?!

Офлайн

#10 Сен. 7, 2013 20:06:42

IVZ
Зарегистрирован: 2013-09-06
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с кодировкой

Только теперь на следующие страницы не переходит.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version