python - 文件未保存在 Python 的正确目录中
问题描述
我有 2 个文件:
第一个文件
test1.py
:from dir2.test2 import func2 def func1(): with open("test1.txt", "w") as f: f.write("some text") func1() func2()
第二个文件
test2.py
:def func2(): with open("test2.txt", "w") as f: f.write("some text")
我的目录结构在运行之前看起来像这样test1.py
:
dir1
|
- test1.py
|
- dir2
|
- test2.py
运行后test1.py
目录结构如下:
dir1
|
- test1.txt
|
- test2.txt
|
- test1.py
|
- dir2
|
- test2.py
但在运行脚本后,我期望目录结构如下所示:
dir1
|
- test1.txt
|
- test1.py
|
- dir2
|
- test2.txt
|
- test2.py
我已经尝试寻找解决此问题的方法,但没有找到任何方法。
那么无论如何在运行后得到我所期望的东西test1.py
。
解决方案
像这样的相对文件路径"test1.txt"
是相对于您运行脚本的目录的。因为,您test1.py
从与自身相同的目录运行 - 相对路径也被解析到相同的目录。所以test1.txt
变成/path/to/dir1/test1.txt
如果您test1.py
从内部运行dir2
,您会在/path/to/dir2/
.
这就是相对路径在几乎每种语言中的工作方式。如果您想要可靠的路径构建,请使用os.path
函数
cwd = os.path.dirname(os.path.abspath(__file__))
这将为您提供您使用它的文件的绝对路径。所以如果你使用它test1.py
- 你得到/path/to/dir1
. 现在您可以使用它os.path.join
来构建您想要的路径
仅举一个完整的例子,制作test2.txt
inside dir2
(即 inside dir1
),假设cwd
line 已解决test1.py
(即__file__
指向test1.py
),您只需执行
test2_path = os.path.join(cwd, 'dir2', 'test2.txt')
with open(test2_path, 'w') as f:
....
而且,如果cwd
在test2.py
(__file__
指向 test2.py)中得到解决,你可以
test2_path = os.path.join(cwd, 'test2.txt')
推荐阅读
- maven - Intellij idea - 重新启动 ide 时,新项目的 maven 设置会重置
- python - 在 python 字典中搜索所有值
- python - 元编程 - 使用 __class__ 时如何从模板生成类?
- javascript - ASP.Net MVC 选择 DropDownList/TextBox 进行编辑,具体取决于哪个可见
- spring - Hazelcast 缓存管理器:无法覆盖缓存的 CacheManager
- java - java - 如何在java中的setter方法中检查对象空值检查?
- python - Python 将 JSON 读取为二进制
- unity3d - Unity中EventSystem在运行时没有模块_输入问题
- javascript - Replace input value on typing in JS
- laravel - npm run watch 不会在特定更改时重新加载