我想在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)
答案 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)
或找到当前执行脚本的完整路径:
$ 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 ##