2017-12-30 8 views
-1

저는 파이썬을 사용하여 CSV 파일을 만들고이 파일에 세부 정보를 저장하는 프로그램을 만듭니다. 또한 파일에서 읽고 지정된 세부 사항을 인쇄하는 프로그램이 필요합니다. 다음 코드는 CSV 파일을 구현 한 방법과 프로그램에서 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 

이 문제를 해결하기 위해 내가 무엇을해야할지 모르겠습니다. 누군가 내가 잘못 가고있는 곳을 보여 주시고, 앞으로해야 할 일을 알 수 있도록 올바른 방법을 가르쳐 주시겠습니까?

도와 주셔서 감사합니다. 모하메드.

+0

평균 속도에는 세 가지 요소가 있습니다. –

+0

각 행에 4 개의 요소를 쓰고 있지만 두 개만 읽으려고합니다. 왜 그것을하고 있습니까? –

+0

@DanielRoseman 필요한 모든 것 때문에 필자는 두 가지 요소 만 읽었습니다. 나머지 두 개는 다음 비트에는 실제로 필요하지 않습니다. 나는 4 개 모두를 읽어야합니까, 아니면 4 개를 쓰지만 2 개만을 읽는 다른 방법이 있습니까 ?? –

답변

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) 각 행에는 4 개의 항목이 있지만이 4 개의 항목을 두 개의 변수 (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) 
+0

가브리엘 (Gabriel)의 도움을받은 후 지금은 효과가있는 것 같습니다. 그래도 도움을 주셔서 감사합니다. –

관련 문제