【问题标题】:Open file in Django app在 Django 应用程序中打开文件
【发布时间】:2012-03-31 11:03:28
【问题描述】:

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

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

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

open() 使用foo 作为根目录。

如果我这样做

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

myapp 将是根。

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

foo/myapp/anotherapp

我希望能够通过同样位于 foo/myapp/anotherapp 的脚本打开位于 foo/myapp/anotherapp 的文件,只需说一下

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

现在,取决于我从哪里运行服务器,我不得不说

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

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

【问题讨论】:

    标签: python django file directory


    【解决方案1】:

    解决方案已在Favorite Django Tips&Tricks 问题中描述。解决方法如下:

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

    这正是你提到的。

    附言。请不要覆盖file 变量,它是one of the builtins

    【讨论】:

    • 再次感谢。显然 Python 不是我选择的常规武器。
    • 这正是我自己的问题所需要的。谢谢!
    • 如果你需要向内走一步怎么办。我的意思是如果 baz.txt 文件在 module_dir 的某个文件夹中,比如说 foo/baz.txt?
    • @user570826:尝试file_path = os.path.join(module_dir, 'foo/baz.txt')file_path = os.path.join(module_dir, 'foo', 'baz.txt')
    • 你能告诉我为什么这样有效吗?为什么必须通过 os.path.dirname(file) 使用模块目录
    【解决方案2】:

    我想我通过另一个堆栈溢出问题找到了答案(是的,我在询问之前确实搜索过......)

    我现在这样做

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

    【讨论】:

    • 仅供参考:您也可以这样做:import socket,然后您可以使用socket.gethostname() 来确定您所在系统的主机名。根据返回的主机名设置路径。
    • @PaulHunter: 你应该使用pwd + '/baz.txt' 而不是os.path.join(pwd, 'baz.txt')
    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2018-11-19
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多