在python目录外创建一个文件

时间:2013-12-29 11:41:22

标签: python file

我想在python中创建当前工作目录之外的文件。这是我的目录结构。

|--myproject
|   |-- gui
|   |   |-- modules
|   |   |   |-- energy
|   |   |   |   |-- configuration
|   |   |   |   |   |-- working_file.py
|   |-- service
|   |   |-- constants
|   |   |   |-- global_variables.json    

我目前正在/myproject/gui/energy/configuration/working_file.py工作,我想在名为/myproject/service/constants

global_variables.json下创建一个文件

我试过

with open("../../../../../service/constants/global_variables.json", 'w') as file_handler:
        content = json.load(file_handler)

5 个答案:

答案 0 :(得分:6)

相对路径从当前工作目录解析,而不是从脚本所在的目录解析。如果您尝试创建的文件需要位于特定目录中,请使用绝对路径(例如/absolute/path/to/myproject/service/constants/global_variables.json)。

如果无法知道此绝对路径,请参阅this SO question

答案 1 :(得分:2)

Python不解释../,它会在cwd中查找名为“..”的目录。

您必须对路径进行硬编码:

with open("/path/to/myproject/service/constants/global_variables.json", 'w') as file_handler:
    content = json.load(file_handler)

或找到当前执行脚本的完整路径:

编辑:我错了,python确实解释了“..”,这里发生的事情是,启动是cwd而不是你的脚本。

$ echo 'Hello world' > text_file.txt
$ mkdir test/
$ cd test
$ python
[...]
>>> open('../text_file.txt').read()
'Hello world\n'

答案 2 :(得分:0)

您确定路径是否正确?

假设当前路径是:   ../的myproject / GUI /模块/能量/配置

您提到的路径是:

"..(a)/..(b)/..(c)/..(d)/..(e)/service/constants/global_variables.json"  

(a) = energy/
(b) = modules/
(c) = gui/
(d) = myproject/
(e) = ../

您认为您的服务目录位于myproject目录中,而不是之前的那个目录。不确定这是不是你的问题......这是你的问题吗?

答案 3 :(得分:0)

您可以做的是从该路径中找到当前文件路径和脚本目录路径,如此

dir = os.path.dirname(__file__)

然后,您可以添加或加入要在此路径中创建文件的位置

jsonfilepath = "../../../../../service/constants/global_variables.json"

reljsonfilepath = os.path.join(dir, jsonfilepath)

f = open (reljsonfilepath, 'w')

请检查,因为这是未经测试的代码。

答案 4 :(得分:0)

对于下面给出的项目结构:

.
`-- myproject
    |-- gui
    |   `-- energy
    |       `-- configuration
    |           `-- test.py
    `-- services
        `-- constants
            `-- out.txt


import os

## Finding absolute path of the current module
drive, tcase_dir = os.path.splitdrive(os.path.abspath(__file__))

## It's good if we always traverse from the project root directory
## rather than the relative path
## So finding the Project's root directory
paths = tcase_dir.split(os.sep)[:-4]
base_dir = os.path.join(drive,os.sep,*paths)


## Known Sub-Directories
SERVICES_DIR = r'services'
CONSTANTS_DIR = r'constants'

## absolute path to the ../myproject/service/constants/ directory
constants_abs_path = os.path.join(base_dir, SERVICES_DIR, CONSTANTS_DIR)

with open(os.path.join(constants_abs_path, r'out.txt'), 'r') as fp:
    ## Do the file Operations here ##