Python加载本地文件至TextUrl报错:URL格式验证失败
解决本地文件路径无法通过TextUrl验证的问题
错误原因
TextUrl类型要求输入符合标准URL格式,你直接传入的Windows本地路径(C:\\...)不属于合法URL范畴,因此触发Pydantic的验证错误。
解决方案
方案1:将本地路径转换为file协议URL
Windows系统的本地文件对应URL格式为file:///C:/...(注意开头三个斜杠,路径统一用正斜杠),修改代码如下:
doc = MyText( url="file:///C:/Users/User/PycharmProjects/vector_database_using_vectordb/games.txt" ) # 直接读取本地文件内容(避开TextUrl的load方法,避免适配问题) with open("C:\\Users\\User\\PycharmProjects\\vector_database_using_vectordb\\games.txt", "r", encoding="utf-8") as f: doc.text = f.read() assert doc.text.startswith('<TITLE>Read Me</TITLE>')
也可以用原始字符串简化路径写法:
file_path = r"C:\Users\User\PycharmProjects\vector_database_using_vectordb\games.txt" doc = MyText(url=f"file:///{file_path.replace('\\', '/')}") with open(file_path, "r", encoding="utf-8") as f: doc.text = f.read()
方案2:修改模型字段类型(放弃URL验证)
如果不需要对url字段做严格的URL格式校验,直接将TextUrl替换为普通字符串类型:
from docarray import BaseDoc class MyText(BaseDoc): text: str = None url: str = None # 替换TextUrl为str类型
之后直接传入本地路径即可:
doc = MyText( url="C:\\Users\\User\\PycharmProjects\\vector_database_using_vectordb\\games.txt" ) with open(doc.url, "r", encoding="utf-8") as f: doc.text = f.read() assert doc.text.startswith('<TITLE>Read Me</TITLE>')
额外说明
原代码中doc.url.load()的写法大概率不支持本地文件路径,因为TextUrl的load方法通常为HTTP/HTTPS URL设计,直接使用Python内置的open()函数读取本地文件更可靠。
内容的提问来源于stack exchange,提问作者Rasai Stewart
相关产品推荐
相关产品推荐

