Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 文件操作在相对路径中不起作用_Python_Python 3.x_File Io_Io_File Not Found - Fatal编程技术网

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

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

我正在开发一个具有相当简单文件结构的python3应用程序,但是我在读取脚本中的文本文件时遇到了问题,这两个脚本的文件结构都低于调用它们的脚本。为了明确起见,文件结构如下所示:

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种方法,这不是问题