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 |
我现在在
我试过
1 2 | with open("../../../../../service/constants/global_variables.json", 'w') as file_handler: content = json.load(file_handler) |
相对路径是从当前工作目录解析的,而不是从脚本所在的目录解析的。如果要创建的文件需要位于特定目录中,请使用绝对路径(例如
如果你不知道这条绝对路径,请参考这个问题。
python不解释
您或者必须硬编码路径:
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目录中,而不是在它前面的目录中。不确定这是否是你的问题…这是你的问题吗?