2011-09-14 6 views
10

면책 조항 : 저는 유럽에 있습니다.Python csv writer 틀린 구분 기호?

this page에 따르면 Excel은 유럽에서 기본 구분 기호로 세미콜론 ;을 사용하여 10 진수 쉼표로 "충돌을 방지"합니다.

import csv 

data = [["test", "data"], ["foo", "bar"]] 
writer = csv.writer(open("data.csv", "wb"), dialect="excel") 
writer.writerows(data) 

이 파일을 생성해야합니다 :

지금, 나는이 파이썬 코드가

test;data 
foo;bar 

을하지만 대신 쉼표를 사용합니다. 왜 이런 일이 일어나는 걸까요? locale.getdefaultlocale()('nl_NL', 'cp1252')을 반환합니다.

+3

나는 downvote를 이해하지 못합니다. 그것은 관련 문제이고, 연구 노력을 보여 주며, 그 해결책은 분명하지 않습니다. –

+0

관련없는 다양한 질문 : 인용 한 "이 페이지"의 네 번째 해결 방법을 읽었습니까? 이 SSV 파일의 의도 된 소비자 - 사람 또는 컴퓨터는 누구입니까? 그들은 그것으로 무엇을 할 것인가? XLS 또는 XLSX 파일 작성을 고려 했습니까 (로케일에 관계없이 만들 수 있습니까?) –

답변

16

이것은 csv.excel 언어가 로캘을 인식하지 못하기 때문입니다. 명시 적으로 구분 기호로 세미콜론을 사용하려면 다음 csv.open

writer = csv.writer(open("data.csv", "wb"), delimiter=";") 

로하거나 새 방언을 만들어 등록하는 명시 적으로 구분 기호를 통과해야 그 어느 경우

class excel_semicolon(csv.excel): 
    delimiter = ';' 
register_dialect("excel-semicolon", excel_semicolon) 
, 부동 소수점 숫자가 쓰여지는 방법을 테스트해야합니다 ... 원하는 유럽 형식 (기수로 쉼표 사용)으로 작성되지 않을 것으로 의심됩니다.

6

excel 방언은 다음과 같은 특성으로 지정 (Lib/csv.py, line 57에서) :

나는이 어떻게 든 로케일에 의존한다는 어떤 힌트를 볼
delimiter = ',' 
quotechar = '"' 
doublequote = True 
skipinitialspace = False 
lineterminator = '\r\n' 
quoting = QUOTE_MINIMAL 

- 따라서 당신은 항상 기본으로 ,를 얻을 수 있습니다 방언.

하지만 쉽게 수정할 수 있습니다.

class excel_semicolon(csv.excel): 
    delimiter = ';' 

writer = csv.writer(open("data.csv", "wb"), dialect=excel_semicolon) 
+0

물론 쉽게 고칠 수 있지만, 파이썬이 올바르게 구현할 엑셀 방언을 포함하면 가정합니다. = S – orlp

+0

@miku : -1. 두 번째 명령문 다음에'csv.excel.delimiter'는'', ''대신'';''를 참조합니다. @Donkopotamus의 답변을 읽어보십시오. –

+0

@ 존 감사합니다. – miku