2017-10-30 6 views
1

. 파이썬 스크립트를 .CSV 파일로 계속 작성하려고하는데 파이썬에 관해서는 초보자입니다. 나는 현재 온도, 습도, 시간, 현재 코드를 포함하는 센서 데이터의 목록을 저장하기 위해 노력하고있어 Writing List of Strings to Excel CSV File in Python목록의 데이터를 CSV 파일로 계속 쓸 수 있음

:

나는 비슷한 문제가 있지만 성공하지 않고있다이 사람을 따르도록 노력했습니다 다음과 같이 : interable 예상, 그래서 첫 번째 데이터 값이 내가 생각 정수 (int)에 저장되어 을 int로하지 :

def writeDataToFile(): 
    sensorData = [] 
    sensorData = getSensorData() 


    with open("/home/pi/Documents/Python Projects/CSV-files/sensor_data.csv", 'w') as csv_file: 
     writer = csv.writer(csv_file, delimiter=',') 
     writer.writerows(sensorData) 

내가지고있어 오류이 무엇입니까?

유형을 정의하는 Java에 익숙하지만 여기서는 변수를 입력하기 만하면 uhm yeah입니다.

필자는 Writer.writerow (sensorData)를 시도한 다음 작동하지만 이미 예상 한대로 데이터의 단일 행을 작성합니다.

나머지 코드는 데이터를 목록에 저장하는 while 루프에서 실행됩니다.

내 루프가 계속 실행될 때이 기능을 사용하여 CSV 파일에 계속 쓰기를 어떻게합니까?

getSensorData 기능 :

def getSensorData(): 
    sensorData = [] 

    temperature = getTemperatureFromSensor() 
    humidity = getHumidityFromSensor() 
    time = getCurrentFormatedTimestamp() 

    sensorData.append(temperature) 
    sensorData.append(humidity) 
    sensorData.append(time) 

    return sensorData 

그래서 나는 단순히 목록을 인쇄하기 위해 시도하고 내가 뭔가를 할 원하는 정확히 수행합니다

[29, 21, '2017년 10월 30일 15시 2분 47초 ']

[29, 21'2017년 10월 30일 15시 2분 52초 ']

[29, 22'2017년 10월 30일 15시 2분 57초 ' ]

,210

[29, 21 '2017년 10월 30일 15시 3분 2초']

[28, 21 '2017년 10월 30일 15시 3분 7초']

[28 (21) '2017년 10월 30일 15시 3분 13초']

등, 즉 난 CSV로 저장하고 싶은 기본적이다

+0

'getSensorData()'함수를 볼 수 있습니까? – scharette

+1

IIUC, 문제는 모든 기존 내용을 완전히 지우는 쓰기 모드 'w'로 파일을 여는 것입니다. 추가 모드에서 열어야합니다. 'getSensorData()'는'int'를 리턴하므로, 당신이 그 메소드를 호출 할 때마다 그 값을'writerow' 할 필요가 있습니다. – roganjosh

+2

좋아요, 그래서'writerows'는 당신이 중첩 된리스트를 넘겨 줄 것을 기대합니다. 각각의 내부리스트는 하나의 행을 나타냅니다. 단일의리스트를 건네 주면 실제로는 최초의 행을 나타내는리스트를 요구하고있는 동안에 인덱스 0에 int 값이 있습니다. 그것이 오류의 출처입니다. 'writerow'를 사용해야합니다. 그건 내 이전의 덧글 이외에; 파일을 열 때마다 이전 데이터를 덮어 쓰지 않도록 추가 모드가 필요합니다. – roganjosh

답변

2

csv로 모듈의 writerows있어서 각 내부에서 나타내는 중첩리스트를 예상 단일 행의 데이터 귀하의 경우 평면 목록을 전달하면 0 번째 색인에서 int 값을 찾습니다. 대신 첫 번째 행에 대한 내부 목록을 기대합니다. 오류 메시지에 대한 설명입니다.

따라서 메소드를 호출 할 때마다 writerow을 사용해야합니다. 그러나 쓰기 모드 ('w')로 파일을 열 때마다 파일의 모든 내용이 삭제됩니다. 따라서 추가 모드에서 파일을 열어야합니다. 장난감 예 :

import csv 

def write_csv(data): 
    with open('example.csv', 'a') as outfile: 
     writer = csv.writer(outfile) 
     writer.writerow(data) 

for x in range(5): 
    write_csv([x, x+1]) 
+0

에 넣어야한다. 나는 바보가된다고 생각한다. 하하, 나는 내가 파이썬을 더 많이 먹어야한다고 생각한다. – Patt089

+0

@ Patt089 걱정하지 마세요, 시간이 올 것입니다. 파이썬에서는 일반적으로 Java와 같은 낙타의 경우를 사용하지 않으며, 함수 이름은 소문자이며 밑줄로 구분됩니다. [PEP8] (https://www.python.org/dev/peps/pep-0008/#prescriptive-naming-conventions)을 참조하십시오. 이 답변으로 귀하의 문제가 해결되었다고 생각되면 [올바른 것으로 표시 할 수 있으면] 고맙게 생각합니다 (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work).). – roganjosh

+0

나는 귀하의 예를 들어 그것을 수정하려고합니다. 이제 내 방법이 1 개의 인수를 취하고 0을 부여한 것입니다. 하지만 약간의 문제가 있습니다.이 부분을 살펴보고 여기로 돌아와서이 문제를 해결할 수있게되면 올바른 것으로 표시해 드리겠습니다. 새로운 오류 – Patt089