2014-09-09 2 views
0

다른 디렉토리에 CSV 파일을 만들려고합니다. 개발 서버에서 코드를 실행하는 동안 잘 작동하지만, 생산에, 그것은 다음 No such file or directory:해당 파일이나 디렉토리가 없습니다. Python CSV

내 코드입니다 오류가 발생합니다 : -

def write_operation(filename,data): 
    with open("./static/" + filename, "wb") as f: 
     writer = csv.writer(f) 
     writer.writerows(data) 

@csrf_exempt 
def download_data(request): 

    if request.POST.has_key('download_data'): 
     start_date = str(request.POST['start_date']).replace('/','-') 
     end_date = str(request.POST['end_date']).replace('/','-') 

     start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d %H:%M") 
     end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d %H:%M") 


     data.insert(0,('Barcode','Weight', 'Length','Breadth','Height')) 
     write_operation('data.csv',data) 

     return HttpResponse(json.dumps('Success'),content_type = "application/json") 
    ctx = {} 
    return render(request, 'dummy/download_data.html', ctx) 
내가받을 오류는

: -

여기

Exception Value: [Errno 2] No such file or directory: 'static/data.csv' 내 디렉토리 구조입니다 : -

├── modules 
|   ├── dummy 
│   │   └── views.py 
├── static 
+0

올바른 디렉토리 수준에서 실행 중이십니까? 그것은 상대 경로처럼 보입니다. (나는 그 파일이 거기에 있는지 두 번 확인했다고 가정합니다) – Ajean

+0

파일이 있습니다. 확인하기 위해 수동으로 파일을 만들었습니다. 'localhost : 8000/static/data.csv' 시도했지만, 프로덕션에서도 열리지 만 여전히 코드를 통해 데이터를 쓸 수는 없습니다. – PythonEnthusiast

+0

그냥 다시 확인해보세요 ... 우릴 좋아합니다. – Ajean

답변

0

전체 경로를 사용하여 이러한 오류를 방지 할 수 있습니다. 예를 들어, 프로젝트 폴더 /home/project-name/. 설정에 상수를 정의하고 프로젝트 홈 폴더를 base_dir으로 설정할 수 있습니다. 그런 다음, 다음 코드를 변경 :

def write_operation(filename,data): 
    with open(config.base_dir + "static/" + filename, "wb") as f: 
     writer = csv.writer(f) 
     writer.writerows(data) 

편집 : 나는 장고와 관련 스크립트를 놓쳤다. 위의 솔루션은 파이썬을위한 일반적인 솔루션입니다. 장고 버전은 거의 동일합니다.

은 다음과 같이 당신의 방법을 다음 줄

import os 

BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 

당신의 settings.py 파일을 추가 및 변경 : 사실

from django.conf import settings 
... 

def write_operation(filename,data): 
with open(settings.BASE_DIR + "static/" + filename, "wb") as f: 
    writer = csv.writer(f) 
    writer.writerows(data) 

, 둘 다베이스에서 동일합니다.

+0

잘 작업했습니다. 하지만 상대 경로가 잘못되었습니다. 및 생산 - 개발 차이 ??? – PythonEnthusiast

+0

개발에 착수 할 때 프로젝트 디렉토리로 가서'python manage.py runserver'로 스크립트를 실행한다고 생각합니다. 프로덕션 환경에서는'python /path-the-directory/.../manage.py runserver'를 사용할 수 있습니다. 또는 제작 및 개발과 함께 다른 운영 체제를 사용할 수도 있습니다. – hkulekci

0

단지 BASE_DIR 값을 사용하여 이러한 문제를 피하기 위해,이 초기화되고 프로젝트 settings.py에 할당

그것은 공식 문서에서 말했다됨에 따라이 같은 프로젝트 내부

빌드 경로 : os.path.join (BASE_DIR, ...)

관련 문제