将字节从Twitter抓取转换为字符串

时间:2018-08-29 02:35:40

标签: python string byte decode

我正在从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')

我已经尝试了多种形式,但是没有一种能够正确显示字符串。

1 个答案:

答案 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>