python - 文件操作在相对路径中不起作用

标签 python python-3.x file-io io file-not-found

我正在开发一个文件结构相当简单的 python3 应用程序,但在读取脚本中的文本文件时遇到问题,这两个文件的文件结构都低于调用它们的脚本。为了绝对清楚,文件结构如下:

app/
|- cli-script
|- app_core/
   |- dictionary.txt
   |- lib.py

cli-script 调用 lib.py,而 lib.py 需要 dictionary.txt 来执行操作我需要它,所以它会在 lib.py 中打开并读取。

cli-script 的基础知识如下所示:

from app_core import lib
def cli_func():
  x = lib.Lib_Class()
  x.lib_func()

lib 的问题区域在这里:

class Lib_Class:
  def __init__(self):
    dictionary = open('dictionary.txt')

我遇到的问题是,虽然我有这个文件结构,但 lib 文件找不到字典文件,返回 FileNotFoundError。出于可移植性的原因,我宁愿只使用相对路径,但除此之外,我只需要使解决方案与操作系统无关。符号链接(symbolic link)是我想到的最后一个选择,但我想不惜一切代价避免它。我有什么选择?

最佳答案

当您运行 Python 脚本时,涉及路径的调用是相对于您运行它们的位置执行的,而不是相对于文件实际所在的位置。

__file__ 变量存储当前文件的路径(无论它在哪里),因此相关文件将是该文件的同级文件。

在您的结构中,__file__引用路径app/app_core/lib.py,因此要创建app/app_core/dictionary.txt,您需要向上然后再向下。

app/app_core/lib.py

import os.path

class Lib_Class:
  def __init__(self):
    path = os.path.join(os.path.dirname(__file__), 'dictionary.txt')
    dictionary = open(path)

或使用pathlib

path = pathlib.Path(__file__).parent / 'dictionary.txt'

关于python - 文件操作在相对路径中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59475552/

相关文章:

python - 用字符串在字典中找到最近的键?

c# - Excel 工作簿导入错误

c++ - wifstream相当于_wfopen的 "mode"参数?

python - 在 virtualenv 中全新安装后缺少 Django 管理/模板/文件夹

python - 用 Anaconda 安装了一个包,无法在 Python 中导入

python - While循环语法错误

html - 预填充 HTML 表单文件输入

python - Flask 资源何时创建?

python - Selenium 等待用户单击 python 中的警报对话框

python - PyArg_ParseTuple 和回调函数指针