2010-06-08 4 views
2

정보를 수집하기 위해 루프에서 구문 분석해야하는 여러 개의 CSV 파일이 있습니다. 문제는 동일한 형식이지만 '\ t'와 ','로 구분되는 것입니다. 이 후, 문자열 주위에서 큰 따옴표를 제거하고 싶습니다.Python : 복수 분할 구분자를 사용하여 파일 분할

파이썬을 가능한 여러 구분 기호로 분할 할 수 있습니까? 분에서

, 내가 사용하여 하나 라인을 분할 할 수 있습니다 :

f = open(filename, "r") 
fields = f.readlines() 
for fs in fields: 
    sf = fs.split('\t') 
    tf = [fi.strip ('"') for fi in sf] 

어떤 제안을 환영합니다.

sf = re.split(r'[,\t]', fs) 

이것은 예를 들어 설명하지 않습니다

+0

중복 가능성 ([파이썬 정규식 개의 구분자 중 한 스트링을 분할] http://stackoverflow.com/questions/618551/python-regex-split-a-string-by-one-of- 두 구분자) – danben

+2

중복으로 닫지 마십시오. 제가 답변 한대로 수동으로 나누는 것은 잘못된 해결책이므로 다른 질문은 도움이되지 않습니다. – interjay

답변

14

파일을 분할하는 것은 좋지 않습니다. 필드 중 하나에 쉼표가 있으면 실패합니다. 예를 들어, 탭으로 구분 된 파일의 경우 : "field1"\t"Hello, world"\t"field3" 줄은 3 대신 4 개의 입력란으로 분할됩니다.

대신 csv 모듈을 사용해야합니다. 여기에는 파일에서 사용되는 구분 기호를 감지 할 수있는 유용한 Sniffer 클래스가 들어 있습니다. csv 모듈은 큰 따옴표도 제거합니다.

import csv 

csvfile = open("example.csv") 
dialect = csv.Sniffer().sniff(csvfile.read(1024)) 
csvfile.seek(0) 
reader = csv.reader(csvfile, dialect) 

for line in reader: 
    #process line 
+0

+1 파이썬에서는 일반적으로 친숙한 형식으로 작업하는 한 문제를 해결할 수있는 도구를 찾을 수 있습니다. 바퀴를 재발 명하려는 많은 중단 된 시도에서 얻은 교훈 :) – daramarak

+0

1024는 무엇을 의미합니까? – user809695

+0

@ user809695 파일의 처음 1024 바이트를 기준으로 형식을 결정합니다. 다른 숫자가 될 수도 있지만 형식을 결정할 수있을만큼 충분한 데이터가 들어있을만큼 커야합니다. – interjay

2

당신은 정규 표현식 (선택적 컴파일)이 작업을 수행 할 수 있습니다 쉼표는 탭으로 구분 된 필드 안에 있습니다. csv 모듈이 도움이되는지 알 수 있습니다.