Windows图片自动上传到百度网盘完整教程
目录
- 环境准备
- 安装Python
- 编写上传脚本
- 获取百度授权码
- 配置脚本
- 执行上传
- 常见问题与排错
环境准备
本教程适用于Windows系统,将本地图片自动上传到百度网盘,上传成功后自动删除本地文件。
功能特点:
- 自动扫描指定目录下的所有图片文件
- 上传到百度网盘指定文件夹
- 上传成功后自动删除本地文件
- 支持批量上传
安装Python
1. 下载Python
访问Python官网:https://www.python.org/downloads/
下载最新版本的Python(推荐3.8及以上版本)
2. 安装Python
- 双击下载的安装程序
- 重要:勾选 “Add Python to PATH”(添加到环境变量)
- 点击 “Install Now” 完成安装
3. 验证安装
打开命令提示符(cmd),输入以下命令:
python--version如果显示Python版本号,说明安装成功。
4. 安装必要的库
在命令提示符中运行:
pipinstallbypy编写上传脚本
创建一个Python文件,例如upload_to_baidu.py,内容如下:
# -*- coding: utf-8 -*-""" 使用bypy直接上传到百度网盘 """importosimportsubprocessfrompathlibimportPathdefcheck_bypy_auth():"""检查bypy是否已授权"""try:result=subprocess.run(['bypy','info'],capture_output=True,text=True,encoding='utf-8')output=result.stdout.lower()if'quota'inoutputor'bytes'inoutput:print("✓ bypy已授权")returnTrueelse:print("❌ bypy未授权")print("\n请先运行以下命令进行授权:")print(" bypy info")print("然后输入授权码: [你的授权码]")returnFalseexceptFileNotFoundError:print("❌ 未安装bypy")print("请运行: pip install bypy")returnFalseexceptExceptionase:print(f"检查授权失败:{e}")returnFalsedefget_image_files(source_path):"""获取所有图片文件"""source_dir=Path(source_path)ifnotsource_dir.exists():print(f"目录不存在:{source_path}")return[]# 支持的图片格式image_extensions={'.jpg','.jpeg','.png','.gif','.bmp','.tiff','.webp','.JPG','.JPEG','.PNG'}image_files=[]forextinimage_extensions:files=list(source_dir.rglob(f'*{ext}'))image_files.extend(files)returnimage_filesdefupload_files(image_files,target_folder,delete_after_upload=False):"""上传文件列表"""uploaded_count=0failed_count=0deleted_files=[]print(f"\n{'='*60}")print("开始上传...")ifdelete_after_upload:print("⚠ 上传成功后将删除本地文件")print(f"{'='*60}")foridx,img_fileinenumerate(image_files,1):try:# 计算相对路径relative_path=img_file.relative_to(Path(r"C:\Users\DCKJ\Downloads\图片助手(ImageAssistant)_批量图片下载器"))remote_path=f"{relative_path}".replace("\\","/")print(f"[{idx}/{len(image_files)}]{img_file.name}")# 创建远程目录dir_path=os.path.dirname(remote_path)ifdir_pathanddir_path!='.':subprocess.run(['bypy','mkdir',dir_path],capture_output=True,text=True)# 上传文件cmd=['bypy','upload',str(img_file),remote_path]result=subprocess.run(cmd,capture_output=True,text=True,encoding='utf-8')ifresult.returncode==0:print(f" ✓ 成功")uploaded_count+=1# 上传成功后删除本地文件ifdelete_after_upload:try:os.remove(img_file)deleted_files.append(str(img_file))print(f" ✗ 已删除本地文件")exceptExceptionasdelete_error:print(f" ⚠ 删除失败:{delete_error}")else:print(f" ✗ 失败")failed_count+=1exceptExceptionase:print(f" ✗ 错误:{e}")failed_count+=1returnuploaded_count,failed_count,deleted_filesdefmain():"""主程序"""# 配置路径(根据实际情况修改)SOURCE_PATH=r"C:\Users\DCKJ\Downloads\图片助手(ImageAssistant)_批量图片下载器"TARGET_FOLDER="ImageAssistant"print("\n"+"="*60)print("图片上传到百度网盘")print("="*60)print(f"源目录:{SOURCE_PATH}")print(f"目标: 我的应用数据/{TARGET_FOLDER}")print("="*60)# 检查授权ifnotcheck_bypy_auth():return# 获取图片文件print(f"\n扫描图片文件...")image_files=get_image_files(SOURCE_PATH)ifnotimage_files:print("❌ 没有找到图片文件")returnprint(f"找到{len(image_files)}个图片文件")# 显示前10个文件print("\n文件列表(前10个):")fori,imginenumerate(image_files[:10],1):size=img.stat().st_size/1024print(f"{i:2d}.{img.name:30s}{size:>6.1f}KB")iflen(image_files)>10:print(f" ... 还有{len(image_files)-10}个文件")# 直接开始上传print(f"\n目标位置:我的应用数据/{TARGET_FOLDER}")print("上传成功后自动删除本地文件")print("\n开始上传...")delete_after=True# 创建目标文件夹(在百度网盘中)print(f"\n创建百度网盘文件夹:{TARGET_FOLDER}")subprocess.run(['bypy','mkdir',TARGET_FOLDER],capture_output=True,text=True)# 上传uploaded,failed,deleted=upload_files(image_files,TARGET_FOLDER,delete_after)# 完成print(f"\n{'='*60}")print("上传完成!")print(f"{'='*60}")print(f"成功:{uploaded}")print(f"失败:{failed}")ifdelete_after:print(f"已删除本地文件:{len(deleted)}")print(f"\n文件位置:我的应用数据/{TARGET_FOLDER}")print(f"网页访问:https://pan.baidu.com/disk/home#/all?vmode=list&path=/我的应用数据/{TARGET_FOLDER}")if__name__=="__main__":try:main()exceptKeyboardInterrupt:print("\n\n已取消")exceptExceptionase:print(f"\n错误:{e}")importtraceback traceback.print_exc()finally:input("\n按回车键退出...")获取百度授权码
1. 初次授权
在命令提示符中运行:
bypy info示例:
https://openapi.baidu.com/oauth/2.0/authorize?client_id=q8WE4EpCsau1oS0MplgMKNBn&errmsg=Auth+Login+Sucess&errno=0&redirect_uri=oob&response_type=code&scope=basic+netdisk&ssnerror=0&stoken=syw5Wsu8DdCX2S0UIf1Xv3X1gZY7wFCY3MMjUt4SPUsxOA94dD25PBGfGz0Efv9RDZjL0lsvHimXz1vd2AAdWH%2FR%2FEFzO3eeeKOF3uObIDdR2mWk6diVvxEMoXvncyUr3oVsB7gvzJqeoqo%2FHAb0R7rQnGP859Tu1AFEZv9FEXc%2BdMloieWE9OWSd%2FEXPu7tCnvV3CsAuSlLuP30H7LYk7xgxd%2FYziVbgVv3HwjhTIe1By135x2ajRru2B%2B%2Bm7WLKS%2BmCezOcSjiPc6hBFr%2BFQ2. 获取授权码
程序会显示一个授权链接,按照以下步骤操作:
- 复制显示的授权链接到浏览器打开
- 登录你的百度账号
- 点击"授权"按钮
- 复制页面显示的授权码
授权码示例:6e0058ddda4e63b2931bb164bd142370(这只是示例,你需要获取自己的)
3. 输入授权码
回到命令提示符,粘贴授权码并按回车
4. 验证授权
再次运行:
bypy info如果显示网盘空间信息,说明授权成功!
配置脚本
修改脚本中的路径配置:
defmain():"""主程序"""# 修改为你的源目录SOURCE_PATH=r"C:\Users\DCKJ\Downloads\图片助手(ImageAssistant)_批量图片下载器"# 修改为你想要的目标文件夹名称TARGET_FOLDER="ImageAssistant"注意事项:
- 路径前面加
r表示原始字符串,避免反斜杠转义问题 SOURCE_PATH是本地图片所在目录TARGET_FOLDER是百度网盘中的文件夹名称(会创建在"我的应用数据"下)
执行上传
方法一:直接运行脚本
在命令提示符中进入脚本所在目录,运行:
python upload_to_baidu.py方法二:双击运行(需要创建批处理文件)
创建一个.bat文件,例如upload.bat:
@echo off chcp 65001 >nul cd /d "%~dp0" python upload_to_baidu.py pause双击upload.bat即可运行。
常见问题与排错
1. SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes
错误信息:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 192-193: truncated \UXXXXXXXX escape原因:路径中的反斜杠\U被误认为是Unicode转义序列
解决方法:在路径字符串前加r前缀
# 错误写法SOURCE_PATH="C:\Users\DCKJ\Downloads\图片助手"# 正确写法SOURCE_PATH=r"C:\Users\DCKJ\Downloads\图片助手"2. FileNotFoundError: 系统找不到指定的文件
错误信息:
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: '微信公众号图片'原因:尝试切换到不存在的本地目录
解决方法:删除os.chdir()调用,因为目标文件夹在百度网盘,不在本地
3. ❌ bypy未授权
错误信息:
❌ bypy未授权解决方法:
# 重新授权bypy info# 输入授权码4. ❌ 未安装bypy
错误信息:
❌ 未安装bypy解决方法:
pipinstallbypy5. PermissionError: 权限不足
错误信息:
PermissionError: [WinError 32] 另一个程序正在使用此文件原因:文件正在被其他程序打开
解决方法:关闭正在使用该文件的程序后重试
6. 上传成功但网盘看不到文件
原因:bypy默认上传到"我的应用数据",不是根目录
解决方法:
- 在百度网盘网页版中找到"我的应用数据"文件夹
- 或者手动将文件夹移动到根目录
7. 授权码过期
错误信息:
授权失败或token过期解决方法:
# 删除旧授权(Windows)del %USERPROFILE%\.bypy.json# 重新授权bypy info8. 找不到图片文件
错误信息:
❌ 没有找到图片文件检查项:
- 源目录路径是否正确
- 目录中是否确实有图片文件
- 图片扩展名是否在支持列表中:
.jpg,.jpeg,.png,.gif,.bmp,.tiff,.webp
9. 上传速度慢
优化建议:
- 检查网络连接
- 避免在网络高峰期上传
- 分批上传大量文件
10. 如何查看详细错误信息
如果脚本运行出错,查看最后的错误堆栈信息:
Traceback(most recent call last):File"xxx.py",line XXX,in<module>main()File"xxx.py",line XXX,inmain()...根据错误类型和行号定位问题。
进阶配置
1. 添加更多图片格式支持
修改image_extensions集合:
image_extensions={'.jpg','.jpeg','.png','.gif','.bmp','.tiff','.webp','.JPG','.JPEG','.PNG','.svg','.ico','.raw'# 添加更多格式}2. 自定义删除行为
修改delete_after变量控制是否删除本地文件:
delete_after=True# 上传成功后删除# 或delete_after=False# 上传成功后保留3. 添加日志记录
在脚本开头添加:
importlogging logging.basicConfig(filename='upload.log',level=logging.INFO,format='%(asctime)s - %(levelname)s: %(message)s')然后在关键位置添加日志:
logging.info(f"上传文件:{img_file.name}")logging.info(f"删除文件:{img_file.name}")总结
本教程完整介绍了:
- ✅ Python环境搭建
- ✅ 上传脚本编写
- ✅ 百度网盘授权流程
- ✅ 脚本配置方法
- ✅ 执行上传命令
- ✅ 常见问题排错
按照本教程操作,你就可以实现Windows本地图片自动上传到百度网盘,并在上传成功后自动清理本地文件。
如有问题,请参考【常见问题与排错】部分。
TIPS:
上传完成之后,文件在“我的应用数据”目录,需要手动挪到真正的文件夹里
