2016-09-14 2 views
1

파이썬에서 파일 출력에 관한 질문이 있습니다. 3 개의 센서에서 값을 읽는 소프트웨어를 설계하고있었습니다. 각 센서는 1 초 동안 100 개의 값을 읽었으며 각 프로세스간에 파일로 인쇄해야합니다.파일에 너무 많은 값을 쓰는 더 나은 방법 Python (장치 메모리가 부족함)

time_memory = [k + i/100 for i in range(100)] # dividing 1 second into 100 intervals 
x = [100 elements] 
y = [100 elements] 
z = [100 elements] 

다음은 파일에 기록하는 코드입니다.

for i in range(self.samples): 
    self.time_memory[i] = file_time + self.time_index[i] 
    f.write("{0} {1} {2} {3}\n".format(self.time_memory[i], x[i], y[i], z[i])) 

그래서 파일의 결과는 측정 시간 8000 초 동안 때, 소프트웨어가 중단, 그러나

time_value, x, y, z 
time_value, x, y, z 
... 

처럼 보일 것입니다. 내가 사용하는 장치가 오래된 장치이기 때문에 장치가 처리해야하는 많은 데이터가 원인이라고 생각합니다. (컴퓨터가 NI DAQ 디바이스에 연결되어 있기 때문에 디바이스를 변경할 수 없습니다.)

위의 코드를 변경하는 많은 대체 방법을 찾으려고했지만 찾을 수 없었습니다. 이 문제로 나를 도울 수있는 사람이 있습니까 ??

+1

나는이 (도움을 디버깅을 요청할 때 전체 역 추적을 포함하십시오) 메모리 상황에서 가능한 원인 파일 처리되지 않습니다 내기 것, 하지만 어떻게 작성하기 전에 측정 값을 저장하고 있는지. –

+0

잘 모르겠다. 정확하게 이해할 수 있지만 1 초마다 작성하는 대신 몇 초 (10-30 초)의 배치를 작성할 수 없습니까? –

+0

_ 측정 시간이 8000 초를 넘으면 소프트웨어는 2 가지 질문을 멈 춥니 다. (a) 파이썬 스크립트가'self.samples'를 어떻게 채우고 있습니까? (b) 소프트웨어가 멈출 때 어떻게됩니까? 예외, 조용한 중단, 다른 것을 보시겠습니까? 이 정보로 질문을 업데이트하십시오. –

답변

-1

바이너리 모드로 데이터를 쓰는 것이 좋습니다. 이것은 텍스트 모드보다 빠르며 (또한 공간이 덜 필요합니다). 따라서이 같은 바이너리 모드로 파일을 열 수 있습니다

f = open('filename.data', 'wb') 
+0

파이썬 버전에 따라 형식이 지정된 문자열은 이미 이진 형식 일 수 있습니다. –

+0

병목 현상이 CPU인지 메모리인지 여부를 알 수 없으므로 명시 적으로 이진 모드를 사용하는 것이 더 빠를 수도 있습니다. 또한 문자열의 .format() 메소드를 피하고 네 개의 값을 연속적으로 f.write()를 호출하여 하나씩 쓸 ​​수도 있습니다. – Maxim

관련 문제