首页 > 解决方案 > 文件未保存在 Python 的正确目录中

问题描述

我有 2 个文件:

  1. 第一个文件test1.py

    from dir2.test2 import func2
    
    def func1():
       with open("test1.txt", "w") as f:
           f.write("some text")
    
    func1()
    func2()
    
  2. 第二个文件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

标签: pythonpython-3.xfiledirectory

解决方案


像这样的相对文件路径"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.txtinside dir2(即 inside dir1),假设cwdline 已解决test1.py(即__file__指向test1.py),您只需执行

test2_path = os.path.join(cwd, 'dir2', 'test2.txt')
with open(test2_path, 'w') as f:
    ....

而且,如果cwdtest2.py__file__指向 test2.py)中得到解决,你可以

test2_path = os.path.join(cwd, 'test2.txt')

推荐阅读