【问题标题】:Opening a file from an imported function从导入的函数打开文件
【发布时间】:2020-05-16 14:14:14
【问题描述】:

我一直在与 Python 中的绝对路径和相对路径“斗争”一段时间,我知道关于这个主题有很多问题,但我找不到我的特定问题的答案。

给定以下项目结构:

package/
    subpackage1/
        moduleX.py
        moduleY.py
    subpackage2/
        moduleZ.py
        folder1/
            file1.txt

我在moduleX.py 中导入来自moduleZ.py 的函数,它需要存储在file1.txt 中的信息才能工作。我从moduleZ.py 导入函数没有问题,但是由于它需要file1.txt,我收到错误消息“没有这样的文件或目录”。

我的问题是:当来自moduleZ.py 的函数在导入后尝试打开file1.txt 时,它会考虑哪个路径?

我希望它使用相对路径,但我找不到它的工作方式。

提前致谢。

【问题讨论】:

    标签: python python-3.x python-import relative-path absolute-path


    【解决方案1】:

    您是否尝试在 moduleZ.py 中放入类似的内容来获取您当前所在的路径,然后从您生成的变量中获取相对路径?

    import os
    mypath = os.path.dirname(__file__)
    txtfile = os.path.join(mypath,folder1,file1.txt)
    
    

    【讨论】:

    • 我只是使用像with open("folder1/file1.txt") 这样的相对路径。我相信您的解决方案可以工作,但这意味着在我要打开文件的每个模块中搜索当前目录。我一直在寻找更直接的解决方案(如果存在)。
    • @JoséSantos 这对于您正在寻找的一些想法可能是一个有用的链接。 stackoverflow.com/questions/40416072/…
    【解决方案2】:

    我的问题是:当 moduleZ.py 中的函数在导入后尝试打开 file1.txt 时,它会考虑哪个路径?

    它考虑从运行代码的人/进程的工作目录开始的相对路径。

    查找数据文件的标准方法之一是记下包根目录的名称,即。在package/__init__.py:

    DIRNAME = os.path.dirname(__file__)
    

    然后每当您想访问文件时:

    from package import DIRNAME
    file1_txt = os.path.join(DIRNAME, 'subpackage2', 'folder1', 'file1.txt')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 2020-07-13
      • 2017-08-12
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多