2012-03-14 4 views
13

open()을 사용하여 장고 앱에서 파일을 열고 싶습니다. 문제는 open()이 어떤 디렉토리에서 루트로 runserver 명령을 실행하는 것 같습니다.장고 앱에서 파일 열기

예. 나는이

$pwd 
/Users/foo 
$python myapp/manage.py runserver 

open()처럼라는 디렉토리 foo에에서 서버를 실행하는 경우 루트 디렉토리로 foo를 사용합니다.

나는이 대신

$cd myapp 
$pwd 
/Users/foo/myapp 
$python manage.py runserver 

myapp 루트 될 것입니다 수행합니다.

단순히 지금

file = open('./baz.txt') 

을 말해서의 내 폴더 구조가이

foo/myapp/anotherapp 
나는 또한 foo/myapp/anotherapp에있는 스크립트에서 foo/myapp/anotherapp에있는 파일을 열 수 있도록하고 싶습니다

처럼 보이는 가정 해 봅시다 , 어디에서 서버를 실행하는지에 따라, 나는 어느 쪽이라도 말해야한다.

file = open('./myapp/anotherapp/baz.txt') 
(210)

또는

file = open('./anotherapp/baz.txt') 

답변

30

솔루션을

(... 그래, 난이 요청하기 전에 검색 않았다) 나는 다른 스택 오버플로 질문을 통해 답을 찾은 것 같아 은 Favorite Django Tips&Tricks 질문에 설명되어 있습니다. 해결책은 다음과 같습니다.

import os 
module_dir = os.path.dirname(__file__) # get current directory 
file_path = os.path.join(module_dir, 'baz.txt') 

정확히 무엇을 언급 했습니까?

ps. file 변수를 덮어 쓰지 마십시오. one of the builtins입니다.

+1

다시 한번 감사드립니다. 분명히 파이썬은 나의 일반적인 선택 무기가 아니다. –

+0

이것은 내 문제에 필요한 것입니다. 감사! – odedbd

+0

한 걸음 앞으로 나가야한다면? baz.txt 파일이 module_dir의 일부 폴더 안에 있으면 foo/baz.txt라고 할 수 있습니까? – Clayton

1

나는 내가 지금이

pwd = os.path.dirname(__file__) 
file = open(pwd + '/baz.txt') 
+0

FYI : 다음과 같이 할 수도 있습니다 :'import socket','socket.gethostname()'을 사용하여 현재 사용중인 시스템의 호스트 이름을 결정할 수 있습니다. 반환되는 호스트 이름에 따라 경로를 설정하십시오. – Furbeenator

+3

@PaulHunter :'pwd + '/ baz.txt'대신'os.path.join (pwd, 'baz.txt')'를 사용해야합니다. – Tadeck

+0

고마워요! –