Python:CSV跟踪错误

时间:2017-12-30 16:31:48

标签: python csv

我正在使用python创建一个程序,该程序涉及我创建CSV文件并在此文件中存储详细信息。我还需要程序从文件中读取并打印指定的详细信息。以下代码显示了我如何实现CSV文件以及如何从中读取程序。

with open("SpeedTracker.csv", "a", newline="") as csvfile:
  writeToFile=csv.writer(csvfile)
  writeToFile.writerow([("Reg: ",RegistrationPlate),('First Camera Time:',FirstCameraTime),("Second Camera Time:",SecondCameraTime),("Average Speed:",AverageSpeed2,"MPH"),])

with open('SpeedTracker.csv', newline='') as csvfile:
  SpeedDetails = csv.reader(csvfile, delimiter=',')
  for Reg, Average in SpeedDetails:
    print(Reg, Average)

但是,当我运行代码并按照用户的说明操作时,我会收到一个我无法理解的错误。错误如下所示:

Traceback (most recent call last):
  File "main.py", line 24, in <module>
    for Reg, Average in SpeedDetails:
ValueError: too many values to unpack (expected 2)
exited with non-zero status

我不知道我应该做些什么来纠正这个问题。有人可以告诉我哪里出错了,并教我正确的方法,以便我知道将来该做什么?

非常感谢你的帮助, 穆罕默德。

1 个答案:

答案 0 :(得分:0)

with open('SpeedTracker.csv', newline='') as csvfile:
    rows = csv.reader(csvfile, delimiter=',')
    for row in rows:
        for SpeedDetails in row:
            reg = row[0]
            firstCam = row[1]
            secondCam = row[2]
            AvgSpeed = row[3]

            print(reg)
            print(firstCam)
            print(secondCam)
            print(AvgSpeed)

您提供的代码存在两个问题。 1)在开始尝试检索列中的数据之前,需要遍历每一行。 2)每行有四个项目,但您试图将这四个项目分成两个变量(regAverage

但更理想的做法是写出csv标头,并创建一个更正常的CSV文件。像这样。

import csv
import os

RegistrationPlate = FirstCameraTime = SecondCameraTime = AverageSpeed2 = 2

with open("SpeedTracker.csv", "a", newline="") as csvfile:
    writeToFile=csv.writer(csvfile)

    #if the csv headers have not been written yet, write them
    if os.path.getsize("SpeedTracker.csv") == 0:
        writeToFile.writerow(["Reg", "First Camera Time", "Second Camera Time", "Average Speed"])

    writeToFile.writerow([RegistrationPlate,FirstCameraTime,SecondCameraTime,AverageSpeed2])

with open('SpeedTracker.csv', newline='') as csvfile:
    rows = csv.reader(csvfile, delimiter=',')
    next(rows) #skip headers

    for row in rows:
        reg = row[0]
        firstCam = row[1]
        secondCam = row[2]
        AvgSpeed = row[3]

        print(reg)
        print(firstCam)
        print(secondCam)
        print(AvgSpeed)