2011-12-21 2 views
0

나는 라인의 길이를 변화 한 꽤 큰 CSV 파일이 :파이썬을 사용하여 CSV 파일의 특정 쉼표를 바꾸는 방법은 무엇입니까?

215080,49,3,0.0,22,42,0.0 
215082,49,3,0.0,22,43,59.999 
215083,49,3,0.0,22,45,0.0 
215085,49,3,0.0,22,46,59.999 
215086,49,3,0.0,22,48,0.0 
215087,49,3,0.0,22,49,0.001 
215088,49,3,0.0,22,49,59.999 
215089,49,3,0.0,22,51,0.0 
215090,49,3,0.0,22,52,0.001 
215688,49,1,59.999,22,49,0.001 
215689,49,1,59.999,22,49,59.999 
215690,49,1,59.999,22,51,0.0 
215691,49,1,59.999,22,52,0.001 
216291,49,1,0.001,22,51,0.0 
216292,49,1,0.001,22,52,0.001 
216293,49,1,0.001,22,52,59.999 

내가 대체하고자하는, 예를 들어, 세미콜론 (;)과 모든 라인에서 4 번째 쉼표 (,). 가장 효율적인 방법은 무엇입니까?

+2

4 번째 콤마, 또는 네번째, 여덟 번째, 12 등? –

+0

@ 워렌 P 죄송합니다. 분명치 않다면 네 번째 혼수 상태 만 볼 수 있습니다. 네 번째 혼수 상태는 좌표, 위도 및 경도 사이의 구분 기호입니다. – daikini

+0

영어 팁 : "네 번째"는 분명합니다. 4 일. "4 분의 1"은 4, 8, 12, 16 등을 의미합니다. –

답변

7
import csv 
with open('source.csv','rb') as source: 
    rdr= csv.reader(source) 
    with open('revised.csv','wb') as target: 
     wtr= csv.writer(target) 
     for r in rdr: 
      wtr.writerow((r[0], r[1], r[2], '{0};{1}'.format(r[3],r[4]), r[5], r[6])) 
+0

솔루션 주셔서 감사합니다 ... 비록 내가 마지막 줄 : wtr.writerow (r [0], r [1], r [2], '{0}; {1}'형식 (r [3], r [4]), r [ 5], r [6])) – daikini

4

입력 할 때마다 다음과 같이 할 수 있습니다.

tmp = line.split(',', 4) 
newline = '%s;%s' % (','.join(tmp[:4]), tmp[4]) 
+0

리터럴 문자열 값 안에 쉼표가있는 필드 주위에 포함 된 따옴표와 같은 내용이 포함 된 실제 CSV 파일이 아니라면이 방법이 효과가 있습니다. 예를 들어, OP가 지정한 입력에 대해 작동합니다. –

+2

@WarrenP : "진정한"CSV 파일은 무엇을 의미합니까? 나는 표준이 있다고 생각하지 않았다. 내가 본 소프트웨어는 쉼표가있는 필드를 "CSV"에 넣으려고 여러 가지 규칙을 사용합니다. –

+2

@Charles : 하나의 진정한 CSV가 없을 수도 있지만 Python의'csv' 모듈은 실제 세계에서 CSV의 주요 변형이라고 생각되는 Excel을 비롯한 여러 변형을 이해할 수 있도록 구성 할 수 있습니다. –

2

다른 접근법

>>> a = '215080,49,3,0.0,22,42,0.0' 
>>> b = a.split(',') 
>>> ','.join(b[0:3] + [b[3] + ';' + b[4]] + b[5:]) 
'215080,49,3,0.0;22,42,0.0' 
관련 문제