You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用with语句打开文件时如何提取文件完整路径

错误原因

os.path.basename、os.path.abspath、os.path.relpath这类路径处理工具函数,要求入参必须是字符串格式的路径值。直接将open()返回的文件对象传入,必然触发类型不匹配报错。
强制将文件对象转换为字符串,得到的是类似<_io.TextIOWrapper name='tmp.txt' mode='r' encoding='UTF-8'>的对象实例描述文本,并非合法路径格式,自然无法用于路径解析。

可行实现方案

Python 标准库返回的本地文件对象自带name属性,存储了打开文件时传入的路径参数,结合路径处理函数即可提取完整路径、文件名等信息,完全适配Python 3.8环境,修正后的可运行代码如下:

import os

with open('tmp.txt', 'r') as file:
    # 从文件对象提取原始路径字符串
    raw_path = file.name
    # 转换为完整绝对路径
    full_path = os.path.abspath(raw_path)
    # 提取文件名
    file_name = os.path.basename(full_path)
    print(f"文件完整路径:{full_path}")
    print(f"文件名:{file_name}")
使用注意点
  • 若open()传入的是相对路径(如示例中的tmp.txt),file.name返回的也是对应相对路径字符串,必须经过os.path.abspath()处理才能得到完整绝对路径。
  • 若open()传入的本身就是绝对路径,file.name会直接返回该绝对路径,无需额外转换。
  • name属性仅对标准本地文件对象有效,若操作的是内存流、管道、网络套接字封装的类文件对象,该属性可能不存在或值无实际路径意义,可提前通过hasattr(file, 'name')做校验,避免抛出属性错误。

内容的提问来源于stack exchange,提问作者Gilad Tayeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:03:31