如何在Python中读取csv文件(带有特殊字符)?如何解码文本数据?从文件中读取编码的文本并转换为字符串

时间:2020-03-01 08:26:17

标签: python utf-8 tweepy

我已经使用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()

print(data.head())

现在,文本数据存储如下:

输出

id…text

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黑碳?...

4 1228020579485261824…b'RT @Coninews:三色Emozioni \ xe2 \ x9c \ xa…

尽管我使用“ utf-8”通过以下代码将文件读取到DataFrame中,但输出中的字符看起来却大不相同。输出看起来像字节。语言是意大利语。

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

如何解码文本数据?

如果您能提供帮助,我将非常高兴,谢谢。

1 个答案:

答案 0 :(得分: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...
...