Python 将csv读取到对象列表,并通过mqtt publisher以30秒的间隔逐行发送
我需要读取一个csv文件,该文件包含一个对象列表,然后执行json.dump并在30秒的间隔内逐行发送。我有这个,但它工作不好,它发送了一行,但这不是第一次,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
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地址/端口,以防止请求泛滥。谢谢,我已对其进行了编辑