如何用Python向Android MTP设备复制文件?路径报错求助
问题分析与解决方案
错误原因
Python标准库的os/shutil模块仅支持本地文件系统操作,MTP设备(如你的Fire HD10)并非本地挂载的磁盘分区,MTP:\\Fire\\Internal storage\\xx.img这种路径不符合本地文件系统的语法规范,因此触发WinError 123错误。
可行解决方案
方案1:使用Windows Shell API(推荐,依赖系统原生MTP支持)
Windows资源管理器本身可识别MTP设备,通过pywin32调用系统Shell接口实现文件传输:
- 安装依赖库:
pip install pywin32
- 替换原有脚本的代码:
import win32com.client import os # 本地源文件路径(用原始字符串避免转义) source = r"C:\Users\BSHR\Desktop\Fire HD10 2019 Bootless\1.img" # MTP设备名称(需和资源管理器显示一致) device_name = "Fire" # 设备内目标文件夹名称 target_folder = "Internal storage" # 目标文件名 target_filename = "xx.img" # 初始化Shell对象 shell = win32com.client.Dispatch("Shell.Application") # 查找目标MTP设备 for item in shell.Namespace(0).Items(): if item.Name == device_name: device = item # 定位设备内的目标文件夹 try: target_folder_obj = device.GetFolder.Items().Item(target_folder) # 复制文件到目标文件夹(CopyHere为异步操作,大文件需自行添加等待逻辑) shell.Namespace(target_folder_obj.Path).CopyHere(source) print(f"{source} 已成功传输到设备") except Exception as e: print(f"传输失败:{str(e)}") break else: print(f"未找到名称为 {device_name} 的MTP设备")
方案2:使用第三方MTP专用库(pymtp)
通过专门的MTP操作库直接与设备通信:
- 安装依赖库:
pip install pymtp
- 示例代码:
import pymtp import os source = r"C:\Users\BSHR\Desktop\Fire HD10 2019 Bootless\1.img" target_filename = "xx.img" # 初始化MTP设备 mtp = pymtp.MTP() mtp.connect() # 获取内部存储的ID(需根据设备实际情况调整) storage_ids = mtp.get_storage_ids() internal_storage_id = storage_ids[0] # 通常第一个是内部存储 # 上传文件到设备 try: mtp.send_file(source, internal_storage_id, target_filename) print(f"{source} 已成功传输到设备") except Exception as e: print(f"传输失败:{str(e)}") finally: mtp.disconnect()
注意事项
- 确保设备已切换为MTP传输模式(而非仅充电模式)
- 设备名称、目标文件夹名称需与Windows资源管理器中显示的完全一致(区分大小写和空格)
- 大文件传输时,
CopyHere是异步操作,若需确认传输完成,可添加文件存在性检查逻辑
内容的提问来源于stack exchange,提问作者BASHEER AHMEED
相关产品推荐
相关产品推荐

