Python 文件操作在相对路径中不起作用
我正在开发一个具有相当简单文件结构的python3应用程序,但是我在读取脚本中的文本文件时遇到了问题,这两个脚本的文件结构都低于调用它们的脚本。为了明确起见,文件结构如下所示:Python 文件操作在相对路径中不起作用,python,python-3.x,file-io,io,file-not-found,Python,Python 3.x,File Io,Io,File Not Found,我正在开发一个具有相当简单文件结构的python3应用程序,但是我在读取脚本中的文本文件时遇到了问题,这两个脚本的文件结构都低于调用它们的脚本。为了明确起见,文件结构如下所示: app/ |- cli-script |- app_core/ |- dictionary.txt |- lib.py cli脚本调用lib.py,lib.py需要dictionary.txt来执行我需要的操作,因此它会被打开并在lib.py中读取 cli脚本的基本功能如下所示: from app_core
app/
|- cli-script
|- app_core/
|- dictionary.txt
|- lib.py
cli脚本
调用lib.py
,lib.py
需要dictionary.txt
来执行我需要的操作,因此它会被打开并在lib.py
中读取
cli脚本的基本功能如下所示:
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
。出于可移植性的原因,我宁愿只使用相对路径,否则我只需要使解决方案与操作系统无关。符号链接是我想出的最后选择,但我想不惜一切代价避免它。我的选项是什么?因为您希望dictionary.txt
与您的lib.py
文件位于同一路径中,所以可以执行以下操作
不要使用dictionary=open('dictionary.txt')
dictionary = open(Path(__file__).parent / 'dictionary.txt')
由于您希望dictionary.txt
与lib.py
文件位于同一路径中,因此可以执行以下操作
不要使用dictionary=open('dictionary.txt')
dictionary = open(Path(__file__).parent / 'dictionary.txt')
当运行Python脚本时,涉及路径的调用是相对于运行路径的位置执行的,而不是文件的实际来源
\uuuu file\uuu
变量存储当前文件的路径(无论它位于何处),因此相对文件将与该路径同级
在您的结构中,\uuuuu file\uuuuuuu
引用路径app/app\u core/lib.py
,因此要创建app/app\u core/dictionary.txt
,您需要上下协同
app/app\u 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脚本时,涉及路径的调用是相对于运行路径的位置执行的,而不是文件的实际来源
\uuuu file\uuu
变量存储当前文件的路径(无论它位于何处),因此相对文件将与该路径同级
在您的结构中,\uuuuu file\uuuuuuu
引用路径app/app\u core/lib.py
,因此要创建app/app\u core/dictionary.txt
,您需要上下协同
app/app\u 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'
请显示突出显示问题的最简单代码。@JonathonReinhart这只是一个简单的打开(dictionary.txt)
调用,导致文件找不到错误请在cli脚本中提供调用lib.py
的代码,以及在lib.py
中访问文本文件的代码。两者都在上下文中。@Bluetooth刚刚编辑了这篇文章以包含代码snippits我很惊讶lib
在app-core
被命名为这样的名称(带连字符)时导入了\uu init\uuuuuuuuuuuuuuuuuuuuuuupy
。我希望app-core
会被调用app\u-core
,并且会有一个空文件app\u-core/\uuuu-init\uuuuuuuuuuuuuuuuupy
。请显示最简单的代码,突出显示您遇到的问题。@JonathonReinhart这只是一个简单的打开(dictionary.txt)
调用导致找不到文件错误请提供调用lib.py
的cli脚本中的代码,以及访问文本文件的lib.py
中的代码。两者都在上下文中。@Bluetooth刚刚编辑了这篇文章以包含代码snippits我很惊讶lib
在app-core
被命名为这样的名称(带连字符)时导入了\uu init\uuuuuuuuuuuuuuuuuuuuuuupy
。我希望app-core
被调用app\u-core
,并且会有一个空文件app\u-core/\uuu-init\uuuuuuuuuuuuuuupy
。是来自pathlib还是来自pathlib
的Path
<代码>从pathlib导入路径
我还更新了答案,答案必须是路径(\uuuuu文件)。父级
是路径
从pathlib或os?从路径
从pathlib导入路径
我还更新了答案,它必须是路径(_文件_)。parent
这就成功了!我今晚无法让pathlib工作,但考虑到你给出了2种方法,这不是问题。这成功了!今晚我无法让pathlib工作,但考虑到您给出了2种方法,这不是问题