【问题标题】:How to read csv files (with special characters) in Python? How can I decode the text data? Read encoded text from file and convert to string如何在 Python 中读取 csv 文件(带有特殊字符)?如何解码文本数据?从文件中读取编码文本并转换为字符串
【发布时间】:2020-06-13 19:55:56
【问题描述】:

我使用 tweepy 使用 Python csv.writer() 将推文的文本存储在 csv 文件中,但我必须在存储之前将文本编码为 utf-8,否则 tweepy 会引发奇怪的错误。

将熊猫导入为 pd

data = pd.read_csv('C:\Users\Lenovo\Desktop\_Carabinieri_10_tweets.csv', delimiter=",", encoding="utf-8")

data.head()

打印(data.head())

现在,文本数据是这样存储的:

输出

id … 文本

0 1228280254256623616 … b'RT @MinisteroDifesa:#14febbraio Il Ministro…

1 1228257366841405441 … b'\xe2\x80\x9cNon t\xe2\x80\x99ama chi amor ti…

2 1228235394954620928 … b'Eseguite dai #Carabinieri del Nucleo Investi…

3 1228219588589965316 ... b'Il pianeta brucia\nConosci il black carbon?...

4 1228020579485261824 ... b'RT @Coninews: Emozioni tricolore \xe2\x9c\xa...

虽然我使用“utf-8”将文件读入 DataFrame,代码如下所示,但输出中的字符看起来非常不同。输出看起来像字节。语言是意大利语。

我尝试使用此代码对此进行解码(其他列中有更多数据,文本在第二列中)。但是,它不会解码文本。我不能使用 .decode('utf-8') 因为 csv 阅读器将数据读取为字符串,即 type(row[2]) 是 'str' 并且我似乎无法将其转换为字节,数据再次被编码!

如何解码文本数据?

如果您能对此提供帮助,我将非常高兴,在此先感谢您。

【问题讨论】:

    标签: python utf-8 tweepy


    【解决方案1】:

    问题可能来自您编写 csv 文件的方式。我敢打赌,当作为文本阅读时(使用简单的文本编辑器,如记事本、notepad++ 或 vi),实际上包含:

    1228280254256623616,…,b'RT @MinisteroDifesa: #14febbraio Il Ministro...'
    1228257366841405441,…,b'\xe2\x80\x9cNon t\xe2\x80\x99ama chi amor ti...'
    ...
    

    或:

    1228280254256623616,…,"b'RT @MinisteroDifesa: #14febbraio Il Ministro...'"
    1228257366841405441,…,"b'\xe2\x80\x9cNon t\xe2\x80\x99ama chi amor ti...'"
    ...
    

    Pandas read_csv 然后正确读取字节字符串的文本表示

    正确的解决方法是编写真正的 UTF-8 编码字符串,但由于我不知道代码,我无法提出解决方案。

    一种可能的解决方法是使用ast.literal_eval 将文本表示形式转换为字节字符串并对其进行解码:

    df['text'] = df['text'].apply(lambda x: ast.literal_eval(x).decode('utf8'))
    

    它应该给出:

                        id ... text
    0  1228280254256623616 ... RT @MinisteroDifesa: #14febbraio Il Ministro...
    1  1228257366841405441 ... “Non t’ama chi amor ti...
    ...
    

    【讨论】:

    • 你太棒了 ;)) 非常感谢@Serge Ballesta
    猜你喜欢
    • 2017-07-26
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2019-07-02
    相关资源
    最近更新 更多