Python 将csv读取到对象列表,并通过mqtt publisher以30秒的间隔逐行发送

Python 将csv读取到对象列表,并通过mqtt publisher以30秒的间隔逐行发送,python,python-3.x,csv,mqtt,Python,Python 3.x,Csv,Mqtt,我需要读取一个csv文件,该文件包含一个对象列表,然后执行json.dump并在30秒的间隔内逐行发送。我有这个,但它工作不好,它发送了一行,但这不是第一次,30秒后,由于某种原因停止 data = [] c = ('id', 'room_id', 'noted_date', 'temp', 'out_in') with open('online.data.csv', 'r') as file: leitor = csv.DictReader(file, fieldnames=c, de

我需要读取一个csv文件,该文件包含一个对象列表,然后执行json.dump并在30秒的间隔内逐行发送。我有这个,但它工作不好,它发送了一行,但这不是第一次,30秒后,由于某种原因停止

data = []
c = ('id', 'room_id', 'noted_date', 'temp', 'out_in')
with open('online.data.csv', 'r') as file:
    leitor = csv.DictReader(file, fieldnames=c, delimiter=',')
    next(leitor)
    for each in leitor:
        d = {}
        #print (each)
        for field in c:
            d[field] = each[field]
            #print(field)
    data.append(d)
    #print(data)

def signal_handler(sig, frame):
    print ('You pressed Ctrl+C.\nProgram closed.')
    sys.exit(0)

def main(argv):
    signal.signal(signal.SIGINT, signal_handler)

    num_msgs_send = len(data)
    mqttc = mqtt.Client('Publisher')
    mqttc.connect(broker, port)
    msgs_sent = 0
    mqttc.loop_start()
    for i in range(num_msgs_send):
        try:
            payload = json.dumps(data[i])
            print (payload)
            print ('Sending msg: ' + payload)
            mqttc.publish(topic, payload)
            msgs_sent += 1
            time.sleep(30)
        except KeyboardInterrupt:
            sys.exit()
    mqttc.loop_stop()
    print ('Messages sent: ' + str(msgs_sent))

if __name__ == '__main__':
    main(sys.argv[1:])

缩进错误,您只是将最后一条记录添加到数据中,因为data.appended在第一个for循环之外

with open('online.data.csv', 'r') as file:
    leitor = csv.DictReader(file, fieldnames=c, delimiter=',')
    next(leitor)
    for each in leitor:
        d = {}
        #print (each)
        for field in c:
            d[field] = each[field]
            #print(field)
        data.append(d)
    #print(data)

这不是对您的问题的回答,但您可能希望在此代码示例中隐藏代理的IP地址/端口,以防止请求泛滥。谢谢,我已对其进行了编辑