2017-07-07 14 views
0

私はこの件に関して以前の質問を読んだが、私はパンダのデータフレームで次のようなバイトコード(?)を持っています:\u0393\u03b9\u03ce\u03c1\u03b3\u03bf\u03c2 u039d\u03c4\u03b1\u03bb\u03ac\u03c1\u03b1\u03c2と私はそれらを人間が読める出力に変換しようとしました。テキストの言語はギリシャ語で、データはJSONファイルから読み込まれました(json.load/loadsはあまり役に立ちませんでしたが、pd.read_jsonもどちらも役に立ちませんでした)。バイトのデコードとSyntaxError:行継続文字の後の予期しない文字

このようなオブジェクトを印刷しようとすると、バイトを出力します。

プリントを例コード:

lst = ['\\u0393\\u03b9\\u03ce\\u03c1\\u03b3\\u03bf\\u03c2 \\u039d\\u03c4\\u03b1\\u03bb\\u03ac\\u03c1\\u03b1\\u03c2', 
    '\\u0393\\u03b9\\u03ce\\u03c1\\u03b3\\u03bf\\u03c2 \\u039d\\u03c4\\u03b1\\u03bb\\u03ac\\u03c1\\u03b1\\u03c2', 
    '\\u0393\\u03b9\\u03ce\\u03c1\\u03b3\\u03bf\\u03c2 \\u039d\\u03c4\\u03b1\\u03bb\\u03ac\\u03c1\\u03b1\\u03c2'] 

df= pd.DataFrame(lst, columns=["some_bytestrings"]) 

print(df["some_bytestrings"]) 
# prints: \u0393\u03b9\u03ce\u03c1\u03b3\u03bf\u03c2 \u0... 

print(df['some_bytestrings'].values[0]) 
# prints: \u0393\u03b9\u03ce\u03c1\u03b3\u03bf\u03c2 \u039d\u03c4\u03b1\u03bb\u03ac\u03c1\u03b1\u03c2 

# eval seems to work for some previous data, don't know why 
print(eval(dfsmall['some_bytestrings'].values[0])) 
# ERROR ARISES HERE 

print('\\u0393\\u03b9\\u03ce\\u03c1\\u03b3\\u03bf\\u03c2 \\u039d\\u03c4\\u03b1\\u03bb\\u03ac\\u03c1\\u03b1\\u03c2') 
# prints \u0393\u03b9\u03ce\u03c1\u03b3\u03bf\u03c2 \u039d\u03c4\u03b1\u03bb\u03ac\u03c1\u03b1\u03c2 

print(print(dfsmall['some_bytestrings'].values[0].encode().decode())) 
# decoding encoding doesn't work, it prints: \u0393\u03b9\u03ce\u03c1\u03b3\u03bf\u03c2 \u039d\u03c4\u03b1\u03bb\u03ac\u03c1\u03b1\u03c2 

注私は再び印刷出力や印刷を取るならば、それは罰金判明こと:

print("\u0393\u03b9\u03ce\u03c1\u03b3\u03bf\u03c2 \u039d\u03c4\u03b1\u03bb\u03ac\u03c1\u03b1\u03c2") 
# prints: 'Γιώργος Νταλάρας' 

関係しているように思えるのようどのようにPythonが二重スラッシュ(\\)を処理するのですか?しかし、私はこの解決策を回避することはできません。string.replace("\\\\", "\\")のようなメソッドは役に立ちません。

答えて

2

"byte_strings"(bytesタイプ)のラベルを付けましたが、実際にはエスケープシーケンスを含むテキスト文字列(strタイプ)です。

幸いにも、pythonにはunicode_escapeという文字列エスケープをデコードするためのコーデックが含まれています。

あなたはcodecsモジュールを使用してこれらの文字列をデコードすることができます - 例えば:

>>> codecs.decode('\\u0393\\u03b9\\u03ce\\u03c1\\u03b3\\u03bf\\u03c2 \\u039d\\u03c4\\u03b1\\u03bb\\u03ac\\u03c1\\u03b1\\u03c2', 'unicode_escape') 
'Γιώργος Νταλάρας' 
関連する問題