2012-11-24 6 views
0
def export_csv(request): 
    response = HttpResponse(mimetype = 'text/csv') 
    response['Content-Disposition'] = 'attachment; filename=exported.csv' 
    writer = csv.writer(response) 
    data = [['First-Name','Last-name'],['Foo','baar']] 
    for entry in data: 
      writer.writerow(entry) 
    return response 

위 코드는 django에서 csv 파일을 출력하기 위해 작성되었습니다. 내가 직면 한 문제는 내 보낸/출력 된 파일의 콘텐츠가 CSV 파일 편집기의 다른 상자에 표시되지 않는다는 것입니다. 데이터 (목록)의 각 항목에 대해 동일한 상자에 인쇄되는 대신 다른 상자에있는 각 항목의 값 (이름, 성)을 해석해야합니다.django와 함께 출력 csv

csv 파일에

실제 결과 : 예상

|First-Name,Last-Name | 
|Foor,bar    | 

:

|First-Name |Last-Name | 
|Foo  |Baar  | 

나는이 목록의 크기와 내용에 독립적으로 파일을 내 보냅니다하는 메커니즘을 얻을 수있는 방법 ?

+2

이전에 게시 한 파일은 실제로 나에게 똑같이 나타납니다. 명심해야 할 것은 CSV가 문자 그대로 쉼표로 구분 된 값이라는 것입니다 (보시다시피). 실제로 올바르게 해석하는 데 사용하는 편집기의 일입니다 (예를 들어, CSV에 쓰고 Excel에서 열 때 쉼표로 분리하도록 지시해야 할 때가 있습니다). – RocketDonkey

+0

예, 당신이 말한대로 일하고 있습니다. 필자가 쉼표로 파일을 나눠서 예상 한 결과를 보여줍니다. 나는 쉼표로 파일을 분할하는 csv 편집기를 말하는 대신 기본 환경에서 예상 결과를 표시하는 방법이있을 것이라고 생각합니다. – Navid

+1

Excel을 사용하는 경우'writer = csv.writer (response, dialect = 'excel')'와 같은 작성자를 시도해보십시오 - 귀하의 경우 도움이 될 수 있습니다. – RocketDonkey

답변

1

당신은 당신의 자신의 사용자 정의 구분 기호 등으로 csv.writer에 대한 자신의 방언을 설정할 수 있습니다 :

class dia2(csv.Dialect): 
    delimiter = '\t' # delimiter should be only 1-char 
    quotechar = '"' 
    escapechar = None 
    doublequote = True 
    skipinitialspace = False 
    lineterminator = '\r\n' 
    quoting = 1 
writer = csv.writer(response, dialect=dia2) 
... 

다른 편집자의 문제 다른 행동의 주요 원인 - 제대로 하나에 CSV-구분 기호를 설정해야 당신은 실제로 각 편집기 자체에서 사용했습니다. 한 가지 더 가능한 이유는 각 CSV 값에 대해 따옴표를 사용하지 않는다는 것입니다 (dialect 클래스에서 따옴표 = 1). 예상되는 출력에 따라 각 필드의 길이가 같고 나머지 공간을 채우면 csv 모듈을 통해 수행 할 수 없지만 각 셀에 대해 동일한 길이로 데이터 서식을 지정할 수 있습니다

data[i] = "%10s" % data[i]