Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将格式错误的字节转换为字典?_Python_Python 3.x - Fatal编程技术网

Python 如何将格式错误的字节转换为字典?

Python 如何将格式错误的字节转换为字典?,python,python-3.x,Python,Python 3.x,我有一个卡夫卡消费者读取字节,我需要将其视为字典。 这是制作人发布的方式: def on_status(self, status): print "on_status" if status.retweeted: return tweetText = status.text.encode('utf8') created_at = status.created_at id = status.id if (re.findall(self.ht

我有一个卡夫卡消费者读取字节,我需要将其视为字典。 这是制作人发布的方式:

def on_status(self, status):
    print "on_status"
    if status.retweeted:
      return
    tweetText = status.text.encode('utf8')
    created_at = status.created_at
    id = status.id
    if (re.findall(self.httpCheck, tweetText) or re.findall(self.httpsCheck, tweetText)):
      return
    if (re.search('[a-zA-Z]', tweetText)):
      try:
        self.idSelf += 1
        self.tweet["tweet"] = tweetText
        self.tweet["id"] = id
        self.tweet["sequence"] = self.idSelf
        self.tweet["created_at"] = created_at
        future = producer.send('bubble-test', bytes(self.tweet))
      except Exception as e:
        print e
      finally:
        producer.flush()
这是使用者处理字节数据的方式:

consumer = KafkaConsumer('bubble-test', bootstrap_servers='localhost:9092', auto_offset_reset='earliest')
    for message in consumer:
        tweet = ast.literal_eval(message.value)
        print (type(tweet))
        sys.exit()
使用ast.literal_eval()时,出现以下错误:

ValueError:节点或字符串格式不正确:b'{'created\u at\': datetime.datetime(2018,5,25,13,35,11),“推特”:“RT@KKRiders: 马维将在预选赛中打出第一个球2.萨哈进球。让我们 go!\n\n#SRHvKKR#teesravar#kkrhaitaiyar“,“id”: 100000737131764736,\'sequence\':1}'


如何将其视为字典,这是我的最终结果?

ast.literal\u eval
不支持
datetime
对象。对于像这样的幼稚对象,您可以发送其属性的元组,并在另一侧使用
datetime.datetime(*attrs)
重新构造它。如果酸洗是一种选择,你可以试试;它已经支持这样的对象。

ast.literal\u eval
此消息有三个问题

  • 它需要文本而不是字节-使用
    decode('utf-8')
  • 它需要
    \\n
    而不是
    \n
    -使用
    替换(“\n”,“\\n”)
  • 它无法计算
    datetime
    对象,因为它只能计算字符串、数字、元组、列表、dicts、boolean和None。(文件:) 但是,您可以删除字符串
    datetime.datetime
    ,然后得到 可以评估。计算后,您可以将元组转换为datetime 回来

这项工作:

consumer = KafkaConsumer('bubble-test', bootstrap_servers='localhost:9092', auto_offset_reset='earliest')
    for message in consumer:
        tweet = (message.value)
        tweet.replace('\n', '\\n')
        tweet = eval(tweet)

我只有错误消息中的
字节
——可能是
消息。值
是不同的对象,它不作为
字节
工作。
consumer = KafkaConsumer('bubble-test', bootstrap_servers='localhost:9092', auto_offset_reset='earliest')
    for message in consumer:
        tweet = (message.value)
        tweet.replace('\n', '\\n')
        tweet = eval(tweet)