4

私はscrapyで作業しています。いくつかのサイトをスクレイピングし、スクレイピングされたページのアイテムをjsonファイルに保存しましたが、一部のサイトには次の形式が含まれています。

l = ["Holding it Together",
     "Fowler RV Trip",
     "S\u00e9n\u00e9gal - Mali - Niger","H\u00eatres et \u00e9tang",
     "Coll\u00e8ge marsan","N\u00b0one",
     "Lines through the days 1 (Arabic) \u0633\u0637\u0648\u0631 \u0639\u0628\u0631 \u0627\u0644\u0623\u064a\u0627\u0645 1",
     "\u00cdndia, Tail\u00e2ndia & Cingapura"]

リストはさまざまな形式で構成されていると予想できますが、それを変換して、以下のような元の名前で文字列をリストに保存したいと思います。

l = ["Holding it Together",
     "Fowler RV Trip",
     "Lines through the days 1 (Arabic) سطور عبر الأيام 1 | شمس الدين خ | Blogs"         ,
     "Índia, Tailândia & Cingapura "]

前もって感謝します...........

4

2 に答える 2

7

Unicodeエスケープを含むバイト文字列があります。unicode_escapeコーデックを使用して、それらをユニコードに変換できます。

>>> print "H\u00eatres et \u00e9tang".decode("unicode_escape")
Hêtres et étang

そして、それをバイト文字列にエンコードして戻すことができます。

>>> s = "H\u00eatres et \u00e9tang".decode("unicode_escape")
>>> s.encode("latin1")
'H\xeatres et \xe9tang'

次のように、Unicode以外の文字列をフィルタリングおよびデコードできます。

for s in l: 
    if not isinstance(s, unicode): 
        print s.decode('unicode_escape')
于 2012-05-25T07:54:31.517 に答える
1

それを変換して、以下のような元の名前で文字列をリストに保存したい

JSONにシリアル化する場合、シーケンスへの非ASCII文字のエスケープをオフにできるフラグが存在する場合があります\ujson標準ライブラリモジュールを使用している場合は、次のようになりensure_asciiます。

>>> print json.dumps(u'Índia')
"\u00cdndia"
>>> print json.dumps(u'Índia', ensure_ascii= False)
"Índia"

ただし、その安全対策を取り除いたため、ASCII以外の文字を正しい方法で処理できるようにする必要があることに注意してください。そうしないと、大量のが発生しますUnicodeError。たとえば、JSONをファイルに書き込む場合は、Unicode文字列を目的の文字セット(UTF-8など)に明示的にエンコードする必要があります。

j= json.dumps(u'Índia', ensure_ascii= False)
open('file.json', 'wb').write(j.encode('utf-8'))
于 2012-05-26T08:25:44.913 に答える