在python目录外创建一个文件

create a file outside the directory in python

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

1
2
3
4
5
6
7
8
9
|--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的文件。

我试过

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


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

如果你不知道这条绝对路径,请参考这个问题。


python不解释../,它将在cwd中查找名为".."的目录。

您或者必须硬编码路径:

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

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

  • python:如何查找脚本的目录
  • 在python中,如何获取当前正在执行的文件的路径和名称?

编辑:我错了,python解释了"…",这里发生的是,这是开始,是CWD而不是你的脚本。

1
2
3
4
5
6
7
8
$ echo 'Hello world' > text_file.txt
$ mkdir test/
$ cd test
$ python
[...]
>>> open('../text_file.txt').read()
'Hello world
'


对于下列项目结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
.
`-- 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 ##

您可以这样做:从该路径中查找当前文件路径和脚本目录路径

1
dir = os.path.dirname(__file__)

然后,您可以添加或加入您想在其中分别创建文件的路径。

1
2
3
4
5
jsonfilepath ="../../../../../service/constants/global_variables.json"

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

f = open (reljsonfilepath, 'w')

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


您确定路径正确吗?

假设当前路径为:../myproject/gui/modules/energy/配置

您提到的路径是:

1
2
3
4
5
6
7
"..(a)/..(b)/..(c)/..(d)/..(e)/service/constants/global_variables.json"  

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

我认为您的服务目录在myproject目录中,而不是在它前面的目录中。不确定这是否是你的问题…这是你的问题吗?