2016-08-18 1 views
0

나는 모양 test.csv라는 CSV이 : 내가 뭐하는 거지추가 to_csv 모드는 다음 새 라인에 추가되지

accuracy threshold trainingLabels 
def   0.116  342 
dja   0.121  1271 

하십시오 dataframe의 모습 summaryDF라고 다음

accuracy threshold trainingLabels 
abc   0.506  15000 
eew   18.12  15000 

과 :

try: 
     if os.stat('test.csv').st_size > 0: 
       summaryDF.to_csv(path_or_buf=f, encoding='utf-8', mode='a', header=False) 
       f.close() 
     else: 
      print "empty file" 
      with open('test.csv', 'w+') as f: 
       summaryDF.to_csv(path_or_buf=f, encoding='utf-8') 
       f.close() 
    except OSError: 
     print "No file" 
     with open('test.csv', 'w+') as f: 
      summaryDF.to_csv(path_or_buf=f, encoding='utf-8') 
      f.close() 

내 파일을 다음과 같이 지정하고 싶습니다.

accuracy threshold trainingLabels 
abc   0.506  15000 
eew   18.12  15000 
def   0.116  342 
dja   0.121  1271 

대신은 다음과 같습니다

accuracy threshold trainingLabels 
abc   0.506  15000 
eew   18.12  15000def   0.116  342 
dja   0.121  1271 

어떻게이 문제를 해결할 수 있습니까? to_csv 대신 CSV 라이터를 사용하고 있지만 추측하면 추가 모드는 기존 파일의 마지막 줄을 건너 뛰지 않습니다.

답변

1

팬더 패키지를 사용하고 있습니까? 어디서나 언급하지 않습니다.

팬더는 자동으로 새 줄을 추가하지 않으므로 강제로 그 방법을 모르겠습니다. 하지만 당신은 할 수 있습니다 :

f.write('\n') 
summaryDF.to_csv(path_or_buf=f, mode='a', ...) 

코드에 관련이없는 버그가 :

당신은 전역 파일 객체가 f라는 것 같다.

당신이 할 때 :

with open('test.csv', 'w+') as f: 
    ... 
    f.close() 

당신이 방금 with 블록에서 연 파일이 폐쇄되는 파일. 변수가 해당 범위의 f에 의해 가려 졌기 때문에 글로벌 파일 f을 닫지 않습니다.

이게 원하는가요? 어느 쪽이든 그것은 말이되지 않습니다. with 범위를 사용하는 이유는 파일을 명시 적으로 닫지 않아도되기 때문입니다.

당신이 중 하나를 사용 :

f = open('filename') 
... 
f.close() 

또는

with open('filename') as f: 
    ... 

당신은 with 블록 내에서 열린 파일을 닫지 마십시오. with 블록을 사용하면 예외가 발생하고 다음 코드가 실행되지 않아도 파일이 닫히는 이점이 있습니다.

관련 문제