2017-09-01 5 views
-2

非ASCII文字を含む文字列= "Tiësto& Sevenn-BOOM(Artelax Remix)"を使用してPythonを使用すると、unidecodeを使用して文字列を修正して非アスキー文字?python unidecode - 使い方

string = random.choice(list(open('data.csv'))).rstrip() 
print "[+] Starting search for:", string 

artistname = string.rsplit(' - ', 1)[0] 
songname = string.rsplit(' - ', 1)[1] 

上記スニップは私を与える:あなたが見ることができるように=ティエスト& Sevenn songname = BOOM(Artelaxリミックス)

artistnameは、artistnameはまだ非ASCII文字が含まれています。この問題を解決するには、どのようにユニコードを使用しますか?

+2

あなたは読みましたが、 [使用例](https://pypi.python.org/pypi/Unidecode)?あなたは*どのような*ユニコードの使い方を見つけようとしましたか? – user2357112

+0

これまでに何を試しましたか?あなたはそれらを削除したい、またはそれらを交換したいですか?あなたの例では、 '' Tiesto&Sevenn ''や' 'Tisto&Sevenn''などが必要ですか? –

+0

はい。私はユニコード(u'string ')を試してみました。私は、すべての文字を一緒に削除しないように、文字をeに変更します。 – god

答えて

2

は、単にあなたの文字列(引用符で囲まれていない)にunidecodeを呼び出す:

分解形式に正規化した後に組み合わせた文字を削除する/長く遅くルートもあります
>>> from unidecode import unidecode 
>>> unidecode(string) 
'Tiesto & Sevenn - BOOM (Artelax Remix)' 

>>> import unicodedata 
>>> ''.join(s for s in unicodedata.normalize('NFD', string) if not unicodedata.combining(s)) 
'Tiesto & Sevenn - BOOM (Artelax Remix)' 
+1

unidecode(string)---これは、data.csvファイル内の文字列の中には、単コードで変換する必要がないものがあるため、例外または警告がスローされます。 /usr/lib64/python2.7/site-packages/unidecode/__init__.py:46:RuntimeWarning:引数はユニコードオブジェクトではありません。エンコードされた文字列を渡すと予期しない結果が生じる可能性があります。 文字列を引いたときのファイル内の非アスキー文字をすべて変換してdata.csvをサニタイズする方が理にかなっていますか? – god

+1

@god:サニタイズする前に、データ*をユニコード*として実際に読み取る必要があります。 ['codecs.open'](https://docs.python.org/3/library/codecs.html#codecs.open)を使用し、正しいエンコーディングを指定してください。 – user2357112

関連する問題