当前位置: 代码迷 >> python >> def从其他脚本访问文件
  详细解决方案

def从其他脚本访问文件

热度:112   发布时间:2023-06-13 14:14:33.0

首先,目录。

file1.py
|
| --__init__.py 
    file2.py
    some_package
    |
    | --__init__.py
        config.py
        settings.ini
    other_package
    |
    | --__init__.py 
        access.py 

现在,在config.py ,有一个函数readfromsetting() ,该函数读取settings.ini并返回其中的内容。 access.py ,我导入了config.py (不,这不是您想的那样, access.py成功导入了config.py ),并尝试调用readfromsetting()函数,但是Python引发了错误。

No such file or directory, "settings.ini"

所以,我的问题是,如何使用config.pyaccess.py读取settings.ini的内容?

我的config.py

def readfromsetting():
    with open('settings.py', 'r') as file:
        return file.read()

我的access.py

from some_package import config

def get_setting():
    return config.readfromsetting()

当您import <some script> python会查看sys.path的内容以导入python脚本。 但是,当您使用open()或其他方法读取文件并提供相对路径时,Python会尝试将路径解析为相对于当前工作目录的相对路径,它将不会在脚本所在的目录内查找(除非是工作目录)。

您不应依赖相对路径,而应尽可能尝试提供绝对路径。

在您的情况下,如果您确定目录结构不会更改(即settings.ini始终位于config.pysettings.py存在的目录中),则可以使用__file__变量访问以下文件的路径文件,然后使用该文件创建您settings.ini绝对路径。 范例-

import os.path
dirpath = os.path.abspath(os.path.dirname(__file__))
settings_file = os.path.join(dirpath,'settings.ini')

您的问题在这里:

def readfromsetting():
  with open('settings.ini', 'r') as file:
    return file.read()

“ settings.ini”是相对路径。 如果您要查找的文件位于同一目录中,则此方法非常理想。 由于您是从access.py调用此方法的,而access.py不在此目录中,因此无法找到settings.ini文件。

我建议您在打开方法中改用settings.ini文件的绝对路径。 如果确定只从access.py内调用此方法,则也可以像其他答案中提到的那样编辑__file__

  相关解决方案