Python3中如何获取临时文件路径而非返回整数类型?
获取临时文件的字符串路径(替代返回的整数描述符)
看起来你是在用Python的tempfile模块时遇到了返回整数而不是路径的问题——这个整数其实是文件描述符(操作系统用来标识打开文件的整数ID),大概率是因为你用了tempfile.mkstemp()却只取了它的第一个返回值。下面给你两种靠谱的方法来获取字符串类型的完整临时文件路径,满足你后续用os.stat(或者处理音频时长)的需求:
方法1:正确解析mkstemp()的返回值
tempfile.mkstemp()实际上返回一个元组(文件描述符, 完整路径字符串),你之前拿到的15就是这个元组的第一个元素。只需要解构元组就能拿到路径:
import tempfile # 解构元组,分别拿到文件描述符和路径 temp_fd, temp_file_path = tempfile.mkstemp(suffix='.wav') # suffix指定后缀,确保是wav文件 # temp_file_path就是你要的字符串类型完整路径,比如/Users/FooBar/.../xxx.wav print(type(temp_file_path)) # 输出 <class 'str'>
拿到路径后,就可以正常使用os.stat:
import os file_stat = os.stat(temp_file_path) # 注意:os.stat只能拿到文件大小、修改时间等元数据,如果要获取wav的播放时长,你可能需要用wave模块或pydub这类音频处理库,比如: # import wave # with wave.open(temp_file_path, 'rb') as wf: # duration = wf.getnframes() / wf.getframerate()
方法2:使用更易用的NamedTemporaryFile
如果你不想手动处理文件描述符,tempfile.NamedTemporaryFile是更友好的选择——它返回一个类文件对象,直接通过.name属性就能获取字符串类型的完整路径,还支持上下文管理器自动管理资源:
import tempfile # 设置delete=False,避免文件关闭后被自动删除(后续需要读取的话必须加这个参数) with tempfile.NamedTemporaryFile(suffix='.wav', delete=False) as temp_file: # 在这里写入你的wav文件内容,比如 temp_file.write(your_wav_binary_data) temp_file_path = temp_file.name # 直接获取字符串路径 print(temp_file_path) # 输出类似/Users/FooBar/Python3.6/.../THE_TEMP_FILE.wav # 后续用路径做操作 import os file_stat = os.stat(temp_file_path) # 用完记得手动删除临时文件(因为设置了delete=False) os.unlink(temp_file_path)
这个方法的优势是更符合Python的优雅写法,不需要手动关闭文件描述符,减少资源泄漏的风险。
补充说明
- 如果你之前误拿了文件描述符(那个整数15),可以通过
os.fdopen(temp_fd)把它转换成文件对象,但这不如直接拿到路径方便。 - 临时文件的默认存储路径由系统决定(比如macOS的
/tmp目录),但上面两种方法返回的都是完整的绝对路径,完全满足你的需求。
内容的提问来源于stack exchange,提问作者user9311010
相关产品推荐
相关产品推荐

