以不同的名称保存多个csv文件,这些文件的名称取决于变量值-python

问题描述 投票:0回答:2

第一次在这里问问题,尽管我已经使用了很多,而且确实很有帮助。我已经搜索了,但是找不到答案。

我的程序将始终接收汽车数据,我想将其保存到多个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上的值,而我最终只会得到最后一组值(在越过另一圈之前)。

您有什么建议?我一直在想添加一些forif,所以让我知道你们认为什么是最好的选择。这个项目是最近的项目,为了确保一切正常,我一直在逐步进行,现在我想改善程序。

感谢您的帮助,如果您需要更多信息,请告诉我。我正在使用Windows,Python 3.8和pycharm。

第一次在这里问问题,尽管我已经使用了很多,而且确实很有帮助。我已经搜索了,但是找不到答案。我的程序肯定会是...

python python-3.x csv pycharm export-to-csv
2个回答
1
投票

您需要在文件名中使用格式变量


0
投票

由于wstk回答了您的第一个问题,注释中的第二个问题是关于将标头添加到新文件中。 (我没有评论,因为没有足够的声誉)

© www.soinside.com 2019 - 2024. All rights reserved.