Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 21, 2015 10:55:09

sourser
Зарегистрирован: 2015-02-16
Сообщения: 18
Репутация: +  0  -
Профиль  

Как изменить кодировку в "list"

Подскажите пожалуйста, какие есть ф-ции для изменения кодировки из юникода в UTF-8?
Читал статьи по юникоду и кодировке, но не знаю , какие методы можно использовать для изменения кодировки в ‘list’
Python v.2.7.9

Вот код:

import requests
from bs4 import BeautifulSoup
r = requests.get("http://fs.to/video/films/group/film_genre/")
responce = r.content
r.encoding = 'utf-8'
print type(responce)
page = BeautifulSoup(responce)
for tag in page.findAll('li'):
	a=tag.find('a')
	print a.contents
	print type(a.contents)

type(responce)
<type 'str'>

type(a.contents)
<type 'list'>
Вот outcome:

[u'\u0410\u043d\u0438\u043c\u0435']
[u'\u0411\u0438\u043e\u0433\u0440\u0430\u0444\u0438\u044f']
[u'\u0411\u043e\u0435\u0432\u0438\u043a']
[u'\u0412\u0435\u0441\u0442\u0435\u0440\u043d']
[u'\u0412\u043e\u0435\u043d\u043d\u044b\u0439']
[u'\u0414\u0435\u0442\u0435\u043a\u0442\u0438\u0432']
[u'\u0414\u0435\u0442\u0441\u043a\u0438\u0439']
[u'\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439']
[u'\u0414\u0440\u0430\u043c\u0430']
[u'\u0418\u0441\u0442\u043e\u0440\u0438\u044f']
[u'\u041a\u043e\u043c\u0435\u0434\u0438\u044f']
[u'\u041a\u043e\u0440\u043e\u0442\u043a\u043e\u043c\u0435\u0442\u0440\u0430\u0436\u043a\u0430']
[u'\u041a\u0440\u0438\u043c\u0438\u043d\u0430\u043b']
[u'\u041c\u0435\u043b\u043e\u0434\u0440\u0430\u043c\u0430']
[u'\u041c\u0438\u0441\u0442\u0438\u043a\u0430']
[u'\u041c\u044e\u0437\u0438\u043a\u043b']
[u'\u041d\u0443\u0430\u0440']
[u'\u041f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f']
[u'\u0421\u0435\u043c\u0435\u0439\u043d\u044b\u0439']
[u'\u0422\u0440\u0438\u043b\u043b\u0435\u0440']
[u'\u0423\u0436\u0430\u0441\u044b']
[u'\u0424\u0430\u043d\u0442\u0430\u0441\u0442\u0438\u043a\u0430']
[u'\u0424\u044d\u043d\u0442\u0435\u0437\u0438']
[u'\u042d\u0440\u043e\u0442\u0438\u043a\u0430']

Скажите пожалуйста, как перевести это в кодировку utf-8
Или изначально выводить так, чтобы было видно киррилицу??

Отредактировано sourser (Фев. 21, 2015 10:57:28)

Офлайн

#2 Фев. 21, 2015 12:31:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Как изменить кодировку в "list"

Во втором питоне он так выводит списки. Если выведешь просто элементы, будет нормально показывать.

Во втором:

>>> [u'абв']
[u'\u0430\u0431\u0432']
>>> 
>>> [u'абв'][0]
u'\u0430\u0431\u0432'
>>> 
>>> print [u'абв'][0]
абв
>>>

В третьем:
>>> ['абв']
['абв']
>>>



Отредактировано py.user.next (Фев. 21, 2015 12:33:26)

Офлайн

#3 Фев. 22, 2015 13:11:04

sourser
Зарегистрирован: 2015-02-16
Сообщения: 18
Репутация: +  0  -
Профиль  

Как изменить кодировку в "list"

py.user.next
Во втором питоне он так выводит списки. Если выведешь просто элементы, будет нормально показывать.Во втором:
Я пробывал вывести их , но у меня не выходит(

Офлайн

#4 Фев. 22, 2015 13:40:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Как изменить кодировку в "list"

Там уже всё правильно раскодировано.

>>> lst = [
...     [u'\u0410\u043d\u0438\u043c\u0435'],
...     [u'\u0411\u0438\u043e\u0433\u0440\u0430\u0444\u0438\u044f'],
...     [u'\u0411\u043e\u0435\u0432\u0438\u043a'],
...     [u'\u0412\u0435\u0441\u0442\u0435\u0440\u043d'],
...     [u'\u0412\u043e\u0435\u043d\u043d\u044b\u0439'],
...     [u'\u0414\u0435\u0442\u0435\u043a\u0442\u0438\u0432'],
...     [u'\u0414\u0435\u0442\u0441\u043a\u0438\u0439'],
...     [u'\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439'],
...     [u'\u0414\u0440\u0430\u043c\u0430'],
...     [u'\u0418\u0441\u0442\u043e\u0440\u0438\u044f'],
...     [u'\u041a\u043e\u043c\u0435\u0434\u0438\u044f'],
...     [u'\u041a\u043e\u0440\u043e\u0442\u043a\u043e\u043c\u0435\u0442\u0440\u0430\u0436\u043a\u0430'],
...     [u'\u041a\u0440\u0438\u043c\u0438\u043d\u0430\u043b'],
...     [u'\u041c\u0435\u043b\u043e\u0434\u0440\u0430\u043c\u0430'],
...     [u'\u041c\u0438\u0441\u0442\u0438\u043a\u0430'],
...     [u'\u041c\u044e\u0437\u0438\u043a\u043b'],
...     [u'\u041d\u0443\u0430\u0440'],
...     [u'\u041f\u0440\u0438\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f'],
...     [u'\u0421\u0435\u043c\u0435\u0439\u043d\u044b\u0439'],
...     [u'\u0422\u0440\u0438\u043b\u043b\u0435\u0440'],
...     [u'\u0423\u0436\u0430\u0441\u044b'],
...     [u'\u0424\u0430\u043d\u0442\u0430\u0441\u0442\u0438\u043a\u0430'],
...     [u'\u0424\u044d\u043d\u0442\u0435\u0437\u0438'],
...     [u'\u042d\u0440\u043e\u0442\u0438\u043a\u0430']
... ]
>>> 
>>> for i in lst:
...     s = i[0]
...     print s
... 
Аниме
Биография
Боевик
Вестерн
Военный
Детектив
Детский
Документальный
Драма
История
Комедия
Короткометражка
Криминал
Мелодрама
Мистика
Мюзикл
Нуар
Приключения
Семейный
Триллер
Ужасы
Фантастика
Фэнтези
Эротика
>>>



Офлайн

#5 Фев. 22, 2015 14:26:58

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Как изменить кодировку в "list"

Проще

print repr(lst).decode("unicode_escape")

Офлайн

#6 Фев. 22, 2015 15:21:40

sourser
Зарегистрирован: 2015-02-16
Сообщения: 18
Репутация: +  0  -
Профиль  

Как изменить кодировку в "list"

4kpt_III
Проще
Я правильно указал?
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
r = requests.get("http://fs.to/video/films/group/film_genre/")	
r.encoding = 'utf-8'
response = r.content
page = BeautifulSoup(response)
lst = []
for tag in page.findAll('li'):
	a = tag.find('a')
	for b in a.contents:
		lst.append(b.string)
		for i in lst:
			s = i[0]
			print  (u'{0}'.format(u'○')),unicode(s)


Результат:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)

Отредактировано sourser (Фев. 22, 2015 15:23:22)

Офлайн

#7 Фев. 23, 2015 00:38:29

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Как изменить кодировку в "list"

4kpt_III
Проще :)
print repr(lst).decode("unicode_escape")
Оно уже в юникоде, ничего не надо перекодировать. Перекодировка понадобится при сохранении в файл, да и то она передаётся аргументом в io.open().

sourser
Результат:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
Этот результат получается, потому что ты неправильно используешь unicode().

Выполни и прочитай:
help(unicode)

Мало того, ты его применяешь там, где он не нужен, потому что уже всё раскодировано.

Найди отличия
между этим
>>> print [u'\u0410\u043d\u0438\u043c\u0435']
[u'\u0410\u043d\u0438\u043c\u0435']
>>> 

и этим
>>> print u'\u0410\u043d\u0438\u043c\u0435'
Аниме
>>>

А потом подумай
как из этого
>>> [u'\u0410\u043d\u0438\u043c\u0435']
[u'\u0410\u043d\u0438\u043c\u0435']
>>> 

получить вот это
>>> u'\u0410\u043d\u0438\u043c\u0435'
u'\u0410\u043d\u0438\u043c\u0435'
>>>

Ты просто не знаешь элементарных вещей - не понимаешь, где список, а где его элемент. Прочитай какую-нибудь книжку для начала.



Отредактировано py.user.next (Фев. 23, 2015 00:39:56)

Офлайн

#8 Фев. 23, 2015 02:05:33

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Как изменить кодировку в "list"

py.user.next
Оно уже в юникоде, ничего не надо перекодировать. Перекодировка понадобится при сохранении в файл, да и то она передаётся аргументом в io.open().

Хоть бы выполнили код, который я написал…

>>> a = [u"Юникод", u"И это тоже"]
>>> print a
[u'\u042e\u043d\u0438\u043a\u043e\u0434', u'\u0418 \u044d\u0442\u043e \u0442\u043e\u0436\u0435']
>>> print repr(a).decode("unicode_escape")
[u'Юникод', u'И это тоже']

Отредактировано 4kpt_III (Фев. 23, 2015 02:14:17)

Офлайн

#9 Фев. 23, 2015 03:36:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Как изменить кодировку в "list"

4kpt_III
Хоть бы выполнили код, который я написал…
Что он делает, понятно и без выполнения. Просто делать это - неправильно. Надо выводить сами фразы.



Офлайн

#10 Фев. 23, 2015 07:56:39

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Как изменить кодировку в "list"

py.user.next
Надо выводить сами фразы.

Ну тогда да, проще будет

print a.contents[0]

Отредактировано 4kpt_III (Фев. 23, 2015 07:56:55)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version