Python 在Django应用程序中打开文件

Python 在Django应用程序中打开文件,python,django,file,directory,Python,Django,File,Directory,我想使用open()从Django应用程序打开一个文件。问题是open()似乎使用运行runserver命令的任何目录作为根目录 例如,如果我像这样从一个名为foo的目录运行服务器 $pwd /Users/foo $python myapp/manage.py runserver foo/myapp/anotherapp open()使用foo作为根目录 如果我这样做的话 $cd myapp $pwd /Users/foo/myapp $python manage.py runserver

我想使用
open()
从Django应用程序打开一个文件。问题是
open()
似乎使用运行
runserver
命令的任何目录作为根目录

例如,如果我像这样从一个名为foo的目录运行服务器

$pwd
/Users/foo
$python myapp/manage.py runserver
foo/myapp/anotherapp
open()
使用
foo
作为根目录

如果我这样做的话

$cd myapp
$pwd
/Users/foo/myapp
$python manage.py runserver
myapp
将是根目录

假设我的文件夹结构如下所示

$pwd
/Users/foo
$python myapp/manage.py runserver
foo/myapp/anotherapp
我希望能够从同样位于
foo/myapp/anotherapp
的脚本中打开位于
foo/myapp/anotherapp
的文件,只需说

file = open('./baz.txt')
现在,根据我运行服务器的位置,我必须说

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


我想我是通过另一个堆栈溢出问题找到答案的(是的,我在提问之前搜索过…)

我现在这样做

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

问题中已经描述了解决方案。解决办法如下:

导入操作系统
module_dir=os.path.dirname(_file__)#获取当前目录
file_path=os.path.join(模块_dir,'baz.txt')
这正是你提到的


请不要覆盖
文件
变量,它是。

仅供参考:您也可以这样做:
导入套接字
,然后您可以使用
socket.gethostname()
确定您所在系统的主机名。根据返回的主机名设置路径。@PaulHunter:您应该使用
os.path.join(pwd,'baz.txt')
而不是
pwd+'/baz.txt'
。再次感谢。显然Python不是我通常选择的武器。这正是我自己的问题所需要的。谢谢如果你需要往里走一步怎么办。我的意思是,如果baz.txt文件在module\u dir的某个文件夹中,比如foo/baz.txt,该怎么办?@user570826:要么试试
file\u path=os.path.join(module\u dir,'foo/baz.txt')
要么
file\u path=os.path.join(module\u dir,'foo',baz.txt')
。你能告诉我为什么这样做吗。?为什么必须通过os.path.dirname(文件)使用模块dir