第一次在这里问问题,尽管我已经使用了很多,而且确实很有帮助。我已经搜索了,但是找不到答案。
我的程序将始终接收汽车数据,我想将其保存到多个csv文件中。我想节省每一圈。因此,对于Lap1,第二圈car_data_2.csv将会是car_data_1.csv,依此类推。
我知道如何强制执行此操作,使用名称创建每个文件并将结果附加到该特定文件。但是由于我不知道我将要跑几圈,所以在我看来这并不是正确的方法和最佳方法。
所以在下面的代码中,当我创建with open ('car_data_(LapNumber).csv', 'w') as csv_file:
行时,我希望程序创建一个名称为car_data_1的文件,因为我将从Lap 1开始。所以LapNumber(该行中的括号内只是为了向您展示)是我要更改的变量的名称,我想用每个圈的数据保存每个csv。
import socket
import csv
'''UDP SET UP'''
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
UDP_IP = 'IP'
UDP_PORT = Port
sock.bind((UDP_IP, UDP_PORT))
'''CSV SET UP'''
fieldnames = ["On","Time","LapNumber","Engine","Speed","Power","BestLap","Distance"]
LapNumber=1
with open(f'car_data_{LapNumber}.csv','w') as csv_file:
csv_writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
csv_writer.writeheader()
while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
values = struct.unpack("<iIffffff",data)
LapNumber = values[2]
with open(f'car_data_{LapNumber}.csv','a') as csv_file:
csv_writer =csv.DictWriter(csv_file, fieldnames=fieldnames)
#csv_writer.writeheader()
info = {
"On" :values[0],
"Time" :values[1],
"LapNumber" :values[2],
"Engine" :values[3],
"Speed" :values[4],
"Power" :values[5],
"BestLap" :values[6],
"Distance" :values[7],
}
csv_writer.writerow(info)
[我了解,也许我将不得不更改结构,因为我认为我将不得不在条件while
或类似内容中创建csv,因为如果我创建csv并将值附加到while
中,它肯定会覆盖csv上的值,而我最终只会得到最后一组值(在越过另一圈之前)。
您有什么建议?我一直在想添加一些for
和if
,所以让我知道你们认为什么是最好的选择。这个项目是最近的项目,为了确保一切正常,我一直在逐步进行,现在我想改善程序。
感谢您的帮助,如果您需要更多信息,请告诉我。我正在使用Windows,Python 3.8和pycharm。
第一次在这里问问题,尽管我已经使用了很多,而且确实很有帮助。我已经搜索了,但是找不到答案。我的程序肯定会是...
您需要在文件名中使用格式变量
由于wstk回答了您的第一个问题,注释中的第二个问题是关于将标头添加到新文件中。 (我没有评论,因为没有足够的声誉)