Python开发中如何获取资源管理器内用户选中的文件路径
问题根因
os.startfile()的功能是调用系统默认关联程序打开你传入的指定路径文件/文件夹,不提供文件选择交互能力,也没有返回值。你把它的执行结果赋值给path变量,拿到的永远是None,根本获取不到用户选中的文件路径,这是功能不符合预期的核心原因。
实现方法
要实现弹窗让用户选择txt文件、自动获取选中文件路径的交互,直接用Python标准库内置的tkinter.filedialog即可,无需安装额外第三方包。
你原代码另外还有两个容易出错的点:
- 保存mp3时文件名只传了
.mp3,没有有效文件名,会导致保存失败 - Windows本地路径直接写在普通字符串里时,反斜杠容易触发转义错误,路径字符串建议加
r前缀标记为原始字符串,或者直接用正斜杠
可直接运行的修正代码
import pyttsx3 as pyt from gtts import gTTS import tkinter as tk from tkinter import filedialog class DICTOR: def __init__(self, path): self.engine = pyt.init() self.engine.setProperty('voice', 0) self.engine.setProperty('rate', 150) # 加encoding参数避免读取txt时出现编码报错 with open(path, 'r', encoding='utf-8') as file: self.file = file.read() def save(self, filename): tss = gTTS(text=self.file, lang='en') tss.save(filename) if __name__ == "__main__": # 隐藏tkinter默认主窗口,只保留文件选择弹窗 root = tk.Tk() root.withdraw() # 弹出源文件选择框,限定仅可选txt格式 txt_path = filedialog.askopenfilename( title="选择待转换的TXT文件", filetypes=[("TXT文本文件", "*.txt")] ) # 用户点取消会返回空字符串,判断后再执行后续逻辑避免报错 if not txt_path: exit() # 弹出保存框让用户选择mp3存储位置 mp3_save_path = filedialog.asksaveasfilename( title="选择MP3保存路径", defaultextension=".mp3", filetypes=[("MP3音频文件", "*.mp3")] ) if mp3_save_path: DICTOR(txt_path).save(mp3_save_path) print(f"转换完成,文件已保存至:{mp3_save_path}")
使用说明
运行代码后会先弹出源文件选择窗口,过滤显示所有txt格式文件供用户选择,选完源文件后会自动弹出保存窗口,用户可以自定义mp3的保存位置和文件名,不需要在代码里硬编码固定路径,完全匹配你需要的交互效果。
内容的提问来源于stack exchange,提问作者user18581930
相关产品推荐
相关产品推荐

