Найти - Пользователи
Полная версия: Как изменить кодировку в "list"
Начало » Python для новичков » Как изменить кодировку в "list"
1
sourser
Подскажите пожалуйста, какие есть ф-ции для изменения кодировки из юникода в 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
Или изначально выводить так, чтобы было видно киррилицу??
py.user.next
Во втором питоне он так выводит списки. Если выведешь просто элементы, будет нормально показывать.

Во втором:
>>> [u'абв']
[u'\u0430\u0431\u0432']
>>> 
>>> [u'абв'][0]
u'\u0430\u0431\u0432'
>>> 
>>> print [u'абв'][0]
абв
>>>

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

>>> 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
... 
Аниме
Биография
Боевик
Вестерн
Военный
Детектив
Детский
Документальный
Драма
История
Комедия
Короткометражка
Криминал
Мелодрама
Мистика
Мюзикл
Нуар
Приключения
Семейный
Триллер
Ужасы
Фантастика
Фэнтези
Эротика
>>>
4kpt_III
Проще

print repr(lst).decode("unicode_escape")
sourser
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)
py.user.next
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'
>>>

Ты просто не знаешь элементарных вещей - не понимаешь, где список, а где его элемент. Прочитай какую-нибудь книжку для начала.
4kpt_III
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'И это тоже']
py.user.next
4kpt_III
Хоть бы выполнили код, который я написал…
Что он делает, понятно и без выполнения. Просто делать это - неправильно. Надо выводить сами фразы.
4kpt_III
py.user.next
Надо выводить сами фразы.

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

print a.contents[0]
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