Django langchain PyPDFLoader 路径问题

使用Django ,langchain打算做pdf读取,只有给到绝对路径,他可以读取到,但是相对路径无法读取到

from langchain.document_loaders import PyPDFLoader
其中GB-50736-2012.pdf文件和PY文件,在同一个目录下

pdf_path = ".\GB-50736-2012.pdf" (不可行,不是有效的链接,path %s is not a vaild file or url “”)
pdf_path = "GB-50736-2012.pdf" (不可行)

img

pdf_path = "C:\GB-50736-2012.pdf" (可行)
loader = PyPDFLoader(pdf_path)

这是需要在哪里设置么?让他实现可以相对路径读取?

你确定两个文件在一个目录下吗,截个图看看
你的根目录是什么?
django项目的话,相对路径需要根据根目录来设置
你可以输出一下根目录看看路径

import os

# 获取当前文件所在目录的绝对路径
current_path = os.path.abspath(os.path.dirname(__file__))
# 获取项目的根目录路径
root_path = os.path.abspath(os.path.join(current_path, '..'))
# 输出根目录路径
print(root_path)


可以使用 os.path 模块来操作文件路径,并且可以使用相对路径。为了实现相对路径读取,你需要将相对路径传递给 PyPDFLoader 构造函数,小小示例参考:

from langchain import PyPDFLoader  
import os  
  
pdf_path = "./GB-50736-2012.pdf"  # 使用相对路径  
loader = PyPDFLoader(pdf_path)

#确保文件与 Python 文件在同一目录下,如还是有问题,就需要检查下路径是否正确?是否包含中文 、空格等,是否赋予权限?
#如有帮助,恭请采纳

放当前目录下不行吗

在Django配置使用相对路径

1. 项目文件结构
2. settings.py文件
在settings.py文件下设置PROJECT_ROOT_DIR变量,存储自己的路径。
其中,audio2emotion是我的项目文件夹名称。
3. predict.py文件
在自己需要调用的py文件下,使用下述语句,引用自己定义的PROJECT_ROOT_DIR变量即可:

from audio2emotion.settings import PROJECT_ROOT_DIR
modelPath = PROJECT_ROOT_DIR + "outputs/{}_model.h5".format(modelType)

你可以使用相对于Django项目根目录的路径来读取文件。请确保GB-50736-2012.pdf文件在正确的位置,并且Django项目的根目录是正确的。

django中文件读取时相对路径是以manage.py所在位置为基准的,因此你你需要将你的PDF文件放在和manage.py同一级别,或者使用完整的绝对路径来读取,否则就会报路径找不到的错误。

可以先获取当前项目根目录,然后再用相对路径拼出绝对路径

基于new bing部分指引作答:
在Django中,使用相对路径来访问文件时,需要确保相对路径是相对于Django项目根目录而言的。您可以尝试以下方法来解决相对路径读取问题:

1、使用os模块获取项目根目录的绝对路径:

import os
from langchain.document_loaders import PyPDFLoader

# 获取项目根目录
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 构建相对路径
pdf_path = os.path.join(base_dir, 'GB-50736-2012.pdf')

# 创建PDF加载器
loader = PyPDFLoader(pdf_path)

2、使用settings.py文件中的BASE_DIR变量获取项目根目录:

from django.conf import settings
from langchain.document_loaders import PyPDFLoader

# 获取项目根目录
base_dir = settings.BASE_DIR

# 构建相对路径
pdf_path = os.path.join(base_dir, 'GB-50736-2012.pdf')

# 创建PDF加载器
loader = PyPDFLoader(pdf_path)

以上两种方法都会使用项目根目录作为相对路径的起点,确保您的文件路径相对于项目根目录的正确性。请根据您的项目结构选择适合的方法,并根据实际情况修改相对路径。

答案参考ChatGPT Plus版,整理汇总。希望能帮助你解决问题在 Django 中,相对路径通常是相对于项目根目录而言的。你可以使用 BASE_DIR 设置相对路径,该变量表示项目的根目录路径。

settings.py 文件中,找到 BASE_DIR 的定义,通常类似于:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

使用 BASE_DIR 和相对路径拼接文件的完整路径,然后将该路径传递给 PyPDFLoader

import os
from langchain.document_loaders import PyPDFLoader

pdf_filename = "GB-50736-2012.pdf"
pdf_path = os.path.join(BASE_DIR, pdf_filename)
loader = PyPDFLoader(pdf_path)

通过这种方式,你可以使用相对于项目根目录的相对路径来读取 PDF 文件。确保在相对路径中不包含特殊字符或转义字符,同时检查文件名和路径是否正确。

这有两种解决办法,一种是你写先对路径的时候,以manage.py文件所在的路径作为根路径,不要以读取pdf那个路径作为参照。而是把pdf所在的路径加入环境变量,即sys.path.insert(0, '你pdf文件所在的路径')

回答部分参考、引用ChatGpt以便为您提供更准确的答案:

要在PX4飞控中实现offboard模式下的离地恒定高度飞行,您可以按照以下步骤进行操作:

  1. 确保您已连接到PX4飞控系统,并具有正确的权限。
  2. 将飞控切换到offboard模式:可以通过Ground Control Station (GCS) 或遥控器将飞控系统切换到offboard模式。
  3. 发布目标位置:使用适当的通信接口(如Mavros)将目标位置信息发送给PX4飞控。目标位置应包括X、Y和Z坐标。
  4. 控制话题选择:在PX4中,可以通过更改/mavros/setpoint_raw/local话题来控制飞行姿态和位置。
  5. 设置高度目标:在控制飞行位置的情况下,将目标位置消息中的Z轴坐标设置为所需的飞行高度,以米为单位。保持Z轴坐标不变,即可实现恒定高度飞行。
  6. 发布目标位置消息:将包含目标位置信息的消息发布到/mavros/setpoint_raw/local话题。确保消息的发布频率足够高,以实现平滑的控制和稳定的飞行。

请注意,具体的操作步骤可能因硬件、软件版本和飞行控制器配置而有所不同。因此,建议您参考PX4官方文档和相关资料,了解适用于您具体情况的详细操作指南。