解码字节和语法错误:行继续符后出现意外字符



我读过以前关于这个主题的问题,但没有提到字节。我在熊猫数据帧中有如下字节字符串 (?(:u0393u03b9u03ceu03c1u03b3u03bfu03c2 u039du03c4u03b1u03bbu03acu03c1u03b1u03c2,我试图将它们转换为人类可读的输出。文本的语言是希腊语,数据是从JSON文件中读取的(json.load/load没有多大帮助,pd.read_json也没有(。

当我尝试打印这样的对象时,它会打印字节。

带有打印的示例代码:

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: u0393u03b9u03ceu03c1u03b3u03bfu03c2 u0...
print(df['some_bytestrings'].values[0]) 
# prints: u0393u03b9u03ceu03c1u03b3u03bfu03c2 u039du03c4u03b1u03bbu03acu03c1u03b1u03c2
# 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 u0393u03b9u03ceu03c1u03b3u03bfu03c2 u039du03c4u03b1u03bbu03acu03c1u03b1u03c2
print(print(dfsmall['some_bytestrings'].values[0].encode().decode()))
# decoding encoding doesn't work, it prints: u0393u03b9u03ceu03c1u03b3u03bfu03c2 u039du03c4u03b1u03bbu03acu03c1u03b1u03c2 

请注意,如果我获取打印的输出并再次打印,结果很好:

print("u0393u03b9u03ceu03c1u03b3u03bfu03c2 u039du03c4u03b1u03bbu03acu03c1u03b1u03c2")
# prints: 'Γιώργος Νταλάρας'

在我看来,这与 Python 如何处理双斜杠 (\( 有关,但我似乎无法解决这个问题,因为像string.replace("\\", "\")这样的方法没有帮助。

>您已经标记了"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')
'Γιώργος Νταλάρας'

最新更新