【发布时间】:2020-03-27 23:40:48
【问题描述】:
第一次在这里问问题,虽然我已经使用了很多,它真的很有帮助。我已经搜索过了,但找不到答案。
我的程序将持续接收汽车数据,我想将其保存到多个 csv 文件中。 我想为每一圈存钱。所以对于 Lap1,我会有 car_data_1.csv 之类的东西,对于第二圈 car_data_2.csv 等等。
我知道如何强制执行,使用名称创建每个文件并将结果附加到该特定文件。但是由于我不知道我将有多少圈,在我看来这不是正确的方法和最好的方法。
所以在下面的代码中,当我创建 with open ('car_data_(LapNumber).csv', 'w') as csv_file: 行时,我希望程序创建一个名为 car_data_1 的文件,因为我将从第 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 并在 @987654324 中附加值@ 它将不断覆盖 csv 上的值,我最终会得到最后一组值(在越过另一圈之前)。
你有什么建议?我一直在考虑添加一些for 和if,所以让我知道你们认为最好的选择。这个项目是最近的项目,我一直在逐步进行以确保一切正常,现在我想改进这个项目。
感谢您的帮助,如果您需要更多信息,请告诉我。 我正在使用 Windows、python 3.8 和 pycharm。
【问题讨论】:
标签: python python-3.x csv pycharm export-to-csv