2012-05-12 4 views
0

큰 따옴표 사이에 쉼표를 무시하고 큰 따옴표 사이에없는 쉼표를 제거하는 방법은 무엇입니까?사용자 지정 Python CSV 구분 기호

+2

귀하의 질문은 명확하지 않습니다. 필자가 입력 형식의 예와 원하는 것을 제공하면 도움이 될 것이라고 생각합니다. – zigg

+0

바라건대 [적절한 csv 파서] (http://docs.python.org/library/csv.html)를 사용하고 수동으로 구문 분석하지 않으십시오. –

+0

마이클, 이것은 CSV 형식으로 텍스트 줄을 구문 분석하려는 운동이었습니다. 나는 csv 모듈을 사용하여 끝내었다. 나는 여전히 모듈 밖에서 그것을 해결하는 방법에 관심이있다. – tijko

답변

3

배터리가 포함되어 있습니다 - 단순히 파이썬과 함께 제공되는 csv module을 사용하십시오.

예 :

그냥 관심을
import csv 

if __name__ == '__main__': 
    file_path = r"/your/file/path/here.csv" 
    file_handle = open(file_path, "r") 
    csv_handle = csv.reader(file_handle) 
    # Now you can work with the *values* in the csv file. 
+0

나는 csv 모듈을 사용하여 끝냈다. 감사! – tijko

1

, 당신 (대부분) 할 정규 표현식을 사용하여;

mystr = 'No quotes,"Quotes",1.0,42,"String, with, quotes",1,2,3,"",,""' 
import re 
csv_field_regex = re.compile(""" 
(?:^|,)   # Lookbehind for start-of-string, or comma 
(
    "[^"]*"  # If string is quoted: match everything up to next quote 
    | 
    [^,]*  # If string is unquoted: match everything up to the next comma 
) 
(?=$|,)   # Lookahead for end-of-string or comma 
""", re.VERBOSE) 

m = csv_field_regex.findall(mystr) 

>>> pprint.pprint(m) 
['No quotes', 
'"Quotes"', 
'1.0', 
'42', 
'"String, with, quotes"', 
'1', 
'2', 
'3', 
'""', 
'', 
'""'] 

인용 부호가있는 문자열 안에 나타나는 이스케이프 된 인용 부호를 제외한 모든 것을 처리합니다. 이 경우도 처리 할 수 ​​있지만 정규식은 더 이상 없습니다. 이것이 우리가 csv 모듈을 가지고있는 이유입니다.

+0

-1 인용 문자열은 둘러싸인 따옴표없이 반환되어야합니다. 또한 이것은 사용자가 입력 파일을 행으로 나눌 책임이 있다고 가정합니다. 데이터에 개행 문자가있을 때 약간 어렵다. –

+0

@ JohnMachin : CSV를 정규식으로 파싱하는 경우 이보다 더 큰 문제가 있습니다. ;) –

+1

** ** 당신은 정규 표현식으로 CSV를 파싱하는 사람입니다. 나는 당신이 그 대답을 전혀 쓰지 않은 이유를 상상할 수 없다. "대부분"== "실패". –