2013-06-21 1 views
1

Django 앱을 통해 CSV 파일을 Google App Engine의 blobstore 파일에 업로드하려고합니다. 나는 파일을 덤핑하는 것이 업로드 된 것처럼 잘못된 줄 바꿈으로 끝날 수있는 문제에 직면하고있다. 그래서, 나는 파이썬의 보편적 인 newlines 모드에서 업로드 된 파일을 열 필요가있다. Django 문서에서는 File 객체에 .open()을 사용하여 새로운 모드를 설정할 수 있다고 제안합니다.Django를 통해 업로드 된 CSV 파일을 Google App Engine의 blobstore에 저장하는 방법은 무엇입니까?

여기에 내 제안 된 솔루션입니다 :

 filename = files.blobstore.create(mime_type='text/csv') 
     csvfile = request.FILES.get('csvfile') 

     with files.open(filename, 'a') as output_file: 
      with csvfile.open(mode='rU') as input_file: 
       output_file.write(input_file.readline()) 

('파일'앱 엔진의 API의 일부입니다)

이 바로 내 것,하지만 난 다른 사람이 비슷한을 받아왔다 있는지 알고 싶어 상황과 더 나은 해결책?

+0

FWIW 작동 희망 업로드 된 파일을 반복해야합니다. 어쩌면 수동으로 열고 닫아야 할 필요가 있을까요? 제가하고 싶은 것조차도 [문서] (https://docs.djangoproject.com/ko/1.4/ref/files/file/)에서 가능하다면 완전히 명확하지 않습니다. – foresmac

+0

다음은 예외입니다. Django의 파일을 제안합니다. 파일 클래스는 컨텍스트 관리자 프로토콜을 구현하지 않았습니까? 파이썬의 파일 객체에 대한 래퍼 일지라도? 'csvfile.open (mode = 'rU') with input_file : AttributeError : __exit__' – foresmac

답변

1

이미 관리하고 있습니다. 당신은

filename = files.blobstore.create(mime_type='text/csv') 
csvfile = request.FILES.get('csvfile') 

with files.open(filename, 'a') as output_file: 
    writer = csv.writer(output_file, quoting=csv.QUOTE_NONE) 
    for row in csv.reader(csvfile.read().splitlines()): 
     writer.writerow(row) 

files.finalize(filename) 

그것은, 위의 코드는 나에게 csvfile에 대한 컨텍스트 관리자의 __exit__에 예외를주고있다

+0

시도해 보겠습니다. 감사! – foresmac