我正在从Twitter抓取推文并将文本数据保存在csv文件中(该文件另存为字节常量b)。查看数据时,我有很多Unicode字符,例如(\xe2\x80\x9c
。是否可以编写一个可以通过csv并解码所有unicode的脚本,还是在下载消息时必须对其进行解码?如果可以通过csv并解码unicode,该如何处理?
以下是数据示例:
b'\xe2\x80\x9cSwitching Gears: Binance Phishing Scammers Pivot to EOS Airdrop Phishing Scam\xe2\x80\x9d by @satnam '
b'Go SMB! \xf0\x9f\x92\x95\xf0\x9f\x8d\xba'
b'@boogymaboi @SMB_DBN Trousers are too sick \xf0\x9f\x98\xa4'
编辑: 当浏览csv文件本身时,csv文件中的文本条目显示为上图,当打印它们时,它们显示为字符串,并且显示与上面相同,但在“ b'\ xe2 \ x80 \ x9c”中。转到EOS”。创建文件时,我将条目附加到现有的csv并使用x.writerow(text)
编写我正在打开包含字符串的文件,然后使用下面的代码对其进行解码并将其写入另一个文件。
with open('my.csv', 'wb') as file:
with open('sec_tweet_dataset.csv') as f:
for a in f:
a = a.decode()
data = a.rstrip()
file.write(data)
file.write('\n')
我已经尝试了多种形式,但是没有一种能够正确显示字符串。
答案 0 :(得分:1)
要将bytes
对象解码为字符串,请使用其decode
方法:
b'\xe2\x80\x9cSwitching Gears: Binance Phishing Scammers Pivot to EOS Airdrop Phishing Scam\xe2\x80\x9d by @satnam '.decode('utf-8')
b'Go SMB! \xf0\x9f\x92\x95\xf0\x9f\x8d\xba'.decode('utf-8')
b'@boogymaboi @SMB_DBN Trousers are too sick \xf0\x9f\x98\xa4'.decode('utf-8')
或者,您可以将文件写成二进制文件,然后以普通的UTF-8文本形式读回:
with open('my.csv', 'wb') as f:
f.write(b'\xe2\x80\x9cSwitching Gears: Binance Phishing Scammers Pivot to EOS Airdrop Phishing Scam\xe2\x80\x9d by @satnam ')
f.write(b'\n')
f.write(b'Go SMB! \xf0\x9f\x92\x95\xf0\x9f\x8d\xba')
f.write(b'\n')
f.write(b'@boogymaboi @SMB_DBN Trousers are too sick \xf0\x9f\x98\xa4')
with open('my.csv') as f:
data = [s.rstrip() for a in f]
您的三个字符串都可以通过两种方式解码
@satnam的“切换方式:Binance网络钓鱼诈骗者转向EOS空投网络钓鱼诈骗”
进入SMB!
@boogymaboi @SMB_DBN裤子太恶心
关键是您的数据已经以Unicode格式输入。您只需要告诉python即可。 decode
和写/读都可以做到这一点。前者只是直接在内存中将字节重新解释为UTF-8编码。后者将数据原样写入文件,然后在读取文件时将其解释为UTF-8。
编写b
时,请确保其处于文件模式。否则,您写入的对象将最终使用str
转换为字符串,而不是正确地进行解码,这就是您最终得到一个包含一堆文字b
和转义字符的文件的方式。 / p>