【问题标题】:Python appending to list will remove unicode附加到列表的 Python 将删除 unicode
【发布时间】:2018-04-10 18:06:14
【问题描述】:

我有字符串:a więc

当我打印时一切正常,但当我附加到列表时,它变为u'a wi\u0119c'。 然后我尝试保存到文件(使用json.dumps,因为列表中有很多单词)并且它保持在u'a wi\u0119c'

如何解决以使u'a wi\u0119c' 成为 więc?

import urllib2
from bs4 import BeautifulSoup
import sys
import json
reload(sys)
sys.setdefaultencoding('utf-8')

def scrapsl():
    wordlist = []
    deflist = []
    soup = BeautifulSoup(urllib2.urlopen('https://sjp.pl/slownik/lp.phtml?page=1').read(), "html.parser")
    nextpage = soup.find_all('b')[1].a.get('href')
    for i in range(2, 52):
        wordlist.append(unicode(soup.find_all('tr')[i].td.text))
        print(unicode(soup.find_all('tr')[i].td.text))
        sp = BeautifulSoup(urllib2.urlopen('https://sjp.pl/' + str(wordlist[(len(wordlist) - 1)]).replace(' ', "+")).read(), "html.parser")
        deflist.append({wordlist[(len(wordlist) - 1)]: sp.find_all('p')[3].text})
        print(str(i) + "\\52")
    print wordlist
    writelist = []
    writelist.append(wordlist)
    writelist.append(deflist)
    ftw = open("slownik.txt", 'w')
    ftw.write(json.dumps(writelist))
    ftw.close()
scrapsl()

谢谢

【问题讨论】:

  • 你正在用它的文本表示交换一个字符串......
  • 好的,但如何解决?
  • 显示您的代码。
  • 它是一个字典抓取工具。我尝试了其他修复,对糟糕的代码感到抱歉。 pastebin.com/xUDm08eh
  • 它们是一样的。如果它最终是一样的,为什么它看起来很重要?

标签: python python-2.7 unicode beautifulsoup


【解决方案1】:

这很好,您无法修复它,因为这是 Python 2.x 的设计。打印列表时,每个值首先由repr 函数处理,因此您打印的是repr'd 值的列表,这可能与您在print每个值之后看到的不同,因为print(value) 输出 str(value),而不是 repr(value)

如果您绝对需要查看实际值(即str(value),而不是repr(value)),只需升级到 Python 3.x。

【讨论】:

  • ... 好吧。但是当我稍后使用json库加载txt时,它可以被解析回它的正常形式吗?
  • @MakaloneLOgman,当然,Python 会自动处理这个,你不必担心。
  • 好的,但仍然 - 我稍后会在列表(TKinter)中需要它,没有任何修复吗?
  • @MakaloneLOgman,如果您对此感到非常不舒服(不,您无法在 Python 2 中转义它),您可以升级到内置支持 Unicode 的 Python 3。
  • 在 py3 中没有任何额外的代码它会工作吗? (我知道 urllib2 必须替换为请求),但我的意思是 unicode 列表和文件。
猜你喜欢
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 2020-10-14
相关资源
最近更新 更多