Python如何从open返回的文件对象中获取对应文件路径
问题解答
报错原因
你使用的os.path(tiffFile).name代码触发TypeError: 'module' object is not callable,是因为os.path是Python的路径处理模块,本身不属于可调用的函数/方法,不能使用os.path(参数)的格式直接调用。
从文件对象提取路径的方法
Python内置的文件对象自带name属性,直接读取该属性即可获取对应文件的路径,无需额外调用os模块相关方法,用法示例:
# f为你拿到的任意文件对象 target_path = f.name
在你的场景中,无论是open(pathToFile,'r')返回的读模式文件对象,还是写操作生成的outfile对象,直接取.name属性就能得到对应的文件路径。
现有代码的隐含问题
你当前写文件的逻辑使用了with上下文管理器,with代码块执行结束后会自动关闭内部打开的文件对象,你在块结束后返回的outfile实际是已经关闭的状态,后续对该对象的读写操作都会触发ValueError报错。
如果你的需求是返回可正常使用的文件对象,可以修改写文件逻辑为不使用with,写完内容后不关闭文件直接返回,修改参考:
def writeBinaryContentsToFile(self,pathToFile, contents): logger.debug("pathToFile:{0}".format(pathToFile)) if not path.exists(pathToFile): logger.debug("file will be created") outfile = open(pathToFile,"wb") outfile.write(contents) # 如果需要返回的文件对象支持读操作,可以加下面这行把指针移到文件开头 # outfile.seek(0) return outfile else: logger.debug("file already exists") return open(pathToFile,'r')
额外提醒:你当前逻辑中,新创建的文件返回的是wb模式的二进制写对象,已存在的文件返回的是r模式的文本读对象,两种对象支持的操作不一致,后续使用时需要注意区分,避免触发模式不匹配的报错。
内容的提问来源于stack exchange,提问作者Amrmsmb
相关产品推荐
相关产品推荐

