Не удается распечатать правильно, когда "re.compile" в Python - PullRequest
0 голосов
/ 25 мая 2018

После вставки «re.compile» в строку невозможно распечатать китайский символ, спасибо!

Сравните вывод между таблицей и строками:

вывод из таблицы "title =" 添加 置顶«

и

вывод из строк) строки не могут вывести наш китайский символ

вывод из таблицы

<table align="center" bgcolor="#DDDDDD" border="0" cellpadding="0" cellspacing="0" class="mytable" id="table_live" width="100%"><tbody><tr align="center" id="tr_0" style="background-color:#6BADDF;color:white">
<td bgcolor="#ff9933" height="20" width="2%">选</td>
<td style="cursor:pointer;" title="角球总比数/半场比分" width="6%">角/半</td></tr>
<tr align="center" bgcolor="#F0F0F0" id="tr1_1545801" index="1" odds="" style="height:18px;display:none"><td><input class="inp" id="chk_1545801" type="checkbox"/></td>
<td><a href="javascript:addConcern(1,13);" title="添加置顶"><img src="image/unTop.png"/></a></td></tr>
</tbody></table>

вывод из строк

[<tr align="center" bgcolor="#F0F0F0" id="tr1_1545801" index="1" odds="" style="height:18px;display:none"><td><input class="inp" id="chk_1545801" type="checkbox"/></td>\n<td><a href="javascript:addConcern(1,13);" title="\u6dfb\u52a0\u7f6e\u9876"><img src="image/unTop.png"/></a></td></tr>]

1 Ответ

0 голосов
/ 25 мая 2018

rows не печатает китайские иероглифы, потому что это список, и способ печати списков по умолчанию - показать безопасное представление строк, которые они содержат.Например, \u6dfb используется для безопасного представления символа 添 в ситуациях, когда мы не можем отображать символы Юникода.Мы можем заставить эту строку интерпретироваться как юникод, поставив перед ней 'u'.

print '\u6dfb'
# \u6dfb
print u'\u6dfb'
# 添

В любом случае, в вашем примере, если мы печатаем отдельные строки, мы можем видеть, что они печатаются нормально, итолько тот факт, что мы были напечатаны в виде списка, вызвал проблему:

#coding:utf-8
from bs4 import BeautifulSoup
import re

html = """"
<table align="center" bgcolor="#DDDDDD" border="0" cellpadding="0" cellspacing="0" class="mytable" id="table_live" width="100%"><tbody>
<tr align="center" id="tr_0" style="background-color:#6BADDF;color:white">
<td bgcolor="#ff9933" height="20" width="2%">选</td>
<td style="cursor:pointer;" title="角球总比数/半场比分" width="6%">角/半</td></tr>
<tr align="center" bgcolor="#F0F0F0" id="tr1_1545801" index="1" odds="" style="height:18px;display:none">
<td><input class="inp" id="chk_1545801" type="checkbox"/></td>
<td><a href="javascript:addConcern(1,13);" title="添加置顶"><img src="image/unTop.png"/></a></td></tr>
"""
soup = BeautifulSoup(html, "html.parser")
table = soup.find('table', id="table_live")
rows = table.findAll("tr", {"id" : re.compile('tr1_*\d')})

print rows
# [<tr align="center" bgcolor="#F0F0F0" id="tr1_1545801" index="1" odds="" style="height:18px;display:none">\n<td><input class="inp" id="chk_1545801" type="checkbox"/></td>\n<td><a href="javascript:addConcern(1,13);" title="\u6dfb\u52a0\u7f6e\u9876"><img src="image/unTop.png"/></a></td></tr>]
for row in rows:
    print row
# <tr align="center" bgcolor="#F0F0F0" id="tr1_1545801" index="1" odds="" style="height:18px;display:none">
# <td><input class="inp" id="chk_1545801" type="checkbox"/></td>
# <td><a href="javascript:addConcern(1,13);" title="添加置顶"><img src="image/unTop.png"/></a></td></tr>

Ради интереса, мы можем сделать вывод на Python именно то, что вы хотите, используя repr (но помните, что печатается здесьявляется строкой).

import sys
# Convert the list into a string representation that displays chinese characters that we can print...
representation = repr([x.encode(sys.stdout.encoding) for x in rows]).decode('string-escape')
print representation
# ['<tr align="center" bgcolor="#F0F0F0" id="tr1_1545801" index="1" odds="" style="height:18px;display:none">
# <td><input class="inp" id="chk_1545801" type="checkbox"/></td>
# <td><a href="javascript:addConcern(1,13);" title="添加置顶"><img src="image/unTop.png"/></a></td></tr>']
print(type(representation))
#<type 'str'>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...