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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:48:34