为了账号安全,请及时绑定邮箱和手机立即绑定

如何导入带有本地文件的库?

如何导入带有本地文件的库?

白衣染霜花 2022-04-23 17:20:21
我正在尝试将我创建的库导入另一个 Python 脚本。当我导入它时,它无法在本地读取文件,这意味着它的文件路径已关闭。我使用 Python3.6.6 Ubuntu 16.04第一种方法import syssys.path.append ("/home/myName/Desktop/myLibrary")# myScript is in myLibrary# it reads some files when being importedimport myScript第二种方法import importlib.utilspec = importlib.util.spec_from_file_location ("myLibrary",      "/home/myName/Desktop/myLibrary/myScript.py")foo = importlib.util.module_from_spec (spec)spec.loader.exec_module (foo)我在这两种情况下得到的错误: FileNotFoundError: [Errno 2] File b'data/myFile.csv' does not exist: b'data/myFile.csv'数据目录在 myLibrary 中。当我os.getcwd()在 myScript 中运行时,我得到:/home/myName/Desktop/myLibrary当我导入 myScript 然后os.getcwd()运行时,我得到:/home/myName/Desktop/otherLibrary知道为什么工作目录关闭了,我应该如何解决这个问题?
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

os.getcwd() 不仅仅返回当前工作目录。它在您的环境中默认为 $PWD。这不是脚本所在的位置,而是您执行脚本时所在的位置。

您可以通过相对路径解决它。__file__提供运行的文件的路径。os.path.dirname提供给定文件的目录。这意味着您可以获得运行 Python 文件的文件夹。因此,您可以根据 Python 文件的文件夹提供路径。

例如。:

sys.path.append(os.path.join(os.path.realpath(os.path.dirname(__file__)), "your_relative_path", "your_python_file.py"))

如果您正在运行的 Python 文件的路径是/home/user/python_script/test.py,那么/home/user/python_script/your_relative_path/your_python_file.pypath 将被附加到您的路径中。

供参考:

如果您之前使用此行,import您将发出警告:(模块级别导入不在文件顶部(E402))但您可以使用此注释行抑制此警告:...  # noqa: E402


查看完整回答
反对 回复 2022-04-23
?
HUH函数

TA贡献1836条经验 获得超4个赞

特殊变量__file__总是包含脚本本身的完整路径。对于导入的模块也是如此。


您可以使用它来查找一些本地数据文件。但是,这确实需要更改模块文件以以不同的方式加载数据。这是一个演示它的基本示例(我假设是 Linux):


myLibrary我在其中创建了一个库目录/var/tmp和一个子目录data,供本地文件读取:


mkdir -p /var/tmp/myLibrary/data

然后,作为测试数据,我创建了一个文本文件:


echo 'Hello from test file'  > /var/tmp/myLibrary/data/testfile.txt

该模块/var/tmp/myLibrary/myScript.py如下所示:


import os.path


# Prepare path to data file realative to this module.

#

libdir = os.path.dirname(__file__)

data_file_path = os.path.join(libdir, 'data/testfile.txt')


# Open the file

#

my_data_file = open(data_file_path)


# Read and show the data from the file

#

data = my_data_file.read()

print(data)

还有一个简单的脚本来导入这个模块。运行时,只需导入库模块即可打印数据文件的内容:


import sys

sys.path.append ('/var/tmp/myLibrary')

import myScript


查看完整回答
反对 回复 2022-04-23
  • 2 回答
  • 0 关注
  • 157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信