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