[东西很实用]给大家分享一个可以复制桌面文件到其他盘的代码
本帖最后由 yemanet 于 2025-11-13 21:52 编辑给大家分享一个可以复制桌面文件到其他盘的代码
希望高手让代码更加完美!
备份桌面文件的代码。自己可以修改
import shutil
import os
from datetime import datetime
# 源目录和目标目录路径
source_dir = 'C://Users//Administrator//Desktop'
target_dir = 'D:\\target_folder'
# 确保目标目录存在,如果不存在则创建
os.makedirs(target_dir, exist_ok=True)
def rename_directory_if_exists(base_dir, target_dir_name):
# 检查目录是否存在
full_path = os.path.join(base_dir, target_dir_name)
if os.path.exists(full_path) and os.path.isdir(full_path):
# 获取当前时间,格式化为字符串
current_time = datetime.now().strftime("%Y%m%d%H%M%S")
# 生成新的目录名
new_dir_name = f"{target_dir_name}_{current_time}"
new_full_path = os.path.join(base_dir, new_dir_name)
# 重命名目录
os.rename(full_path, new_full_path)
print(f"目录已重命名为: {new_full_path}")
try:
print(f'Directory {source_dir} copied to {target_dir}')
print("这个执行了吗?")
except Exception as e:
print(f'Failed to copy directory: {e}')
您好!感谢分享您的代码。我注意到代码的逻辑有些问题,主要是复制操作只在目录存在时才执行,这可能导致备份失败。下面是一个改进版本,修复了逻辑问题并增强了错误处理。
import shutil
import os
from datetime import datetime
# 源目录和目标目录路径(可根据需要修改)
source_dir = 'C://Users//Administrator//Desktop'
target_dir = 'D:\\target_folder'
# 确保目标目录存在
os.makedirs(target_dir, exist_ok=True)
def rename_directory_if_exists(base_dir, target_dir_name):
full_path = os.path.join(base_dir, target_dir_name)
if os.path.exists(full_path) and os.path.isdir(full_path):
current_time = datetime.now().strftime("%Y%m%d%H%M%S")
new_dir_name = f"{target_dir_name}_{current_time}"
new_full_path = os.path.join(base_dir, new_dir_name)
try:
os.rename(full_path, new_full_path)
print(f"目录已重命名为: {new_full_path}")
except Exception as e:
print(f"重命名失败: {e}")
else:
print(f"目录 {full_path} 不存在,无需重命名。")
# 先重命名目标目录(如果存在)
rename_directory_if_exists(target_dir, "Desktop")
# 然后复制源目录到目标目录
try:
shutil.copytree(source_dir, os.path.join(target_dir, "Desktop"))
print(f"目录 {source_dir} 已成功复制到 {os.path.join(target_dir, 'Desktop')}")
except Exception as e:
print(f"复制失败: {e}")
改进说明:
- 修复了复制逻辑:现在无论目标目录是否存在,都会尝试复制。
- 增强了错误处理:重命名和复制操作都添加了异常捕获。
- 简化了代码结构:将重命名和复制分开,提高可读性。
您可以根据需要调整路径或添加更多功能,例如备份前确认或日志记录。如果有其他问题,欢迎继续交流!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2025-11-13 21:45
您好!感谢分享您的代码。我注意到代码的逻辑有些问题,主要是复制操作只在目录存在时才执行,这可能导致备 ...
如果我在这个文件夹下创建一个Desktop的文件,运行就会报错的,呵呵!小甲鱼老师该如何应对呢????
程序就会报错的!咋要考虑各种问题的。测试过报错复制不了?
yemanet 发表于 2025-11-14 17:46
FishC 发表于 2025-11-13 21:45
您好!感谢分享您的 ...
您说得非常对!如果目标目录下已经存在一个名为 "Desktop" 的文件(而不是文件夹),代码确实会报错。这是因为 shutil.copytree() 要求目标路径必须不存在或是一个空目录。
下面是一个改进版本,可以处理目标路径下可能存在的文件或文件夹:
import shutil
import os
from datetime import datetime
# 源目录和目标目录路径(可根据需要修改)
source_dir = 'C://Users//Administrator//Desktop'
target_base_dir = 'D:\\target_folder'
# 确保目标基目录存在
os.makedirs(target_base_dir, exist_ok=True)
def rename_if_exists(path):
"""
如果指定路径存在(无论是文件还是文件夹),则重命名它
"""
if os.path.exists(path):
# 获取路径的目录和基名
dir_name = os.path.dirname(path)
base_name = os.path.basename(path)
current_time = datetime.now().strftime("%Y%m%d%H%M%S")
new_base_name = f"{base_name}_{current_time}"
new_path = os.path.join(dir_name, new_base_name)
try:
os.rename(path, new_path)
print(f"路径已重命名为: {new_path}")
return True
except Exception as e:
print(f"重命名失败: {e}")
return False
return True# 路径不存在,无需处理
# 目标路径
target_path = os.path.join(target_base_dir, "Desktop")
# 先重命名目标路径(如果存在)
if rename_if_exists(target_path):
# 然后复制源目录到目标路径
try:
shutil.copytree(source_dir, target_path)
print(f"目录 {source_dir} 已成功复制到 {target_path}")
except FileNotFoundError:
print(f"错误: 源目录 {source_dir} 不存在")
except Exception as e:
print(f"复制失败: {e}")
else:
print("无法继续执行,因为重命名操作失败")
改进说明:
- 新增了 rename_if_exists() 函数,可以处理任何类型的路径(文件或文件夹)
- 在复制前先检查并重命名目标路径,确保复制操作不会因路径冲突而失败
- 添加了更详细的错误处理,包括源目录不存在的特殊情况
- 函数返回布尔值以指示操作状态,便于后续逻辑判断
这个版本应该能解决您提到的问题。如果目标路径下存在 "Desktop" 文件,程序会先将其重命名(如 "Desktop_20251113215230"),然后再执行复制操作。
感谢您的反馈,这让代码更加健壮!如果还有其他边界情况,欢迎继续讨论。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 感谢 小甲鱼老师的迅速处理! yemanet 发表于 2025-11-15 18:49
感谢 小甲鱼老师的迅速处理!
不客气!很高兴能帮到您。编程就是这样,通过不断发现问题和解决问题,我们的代码会变得越来越健壮。
如果您在使用过程中遇到任何其他问题,或者想要添加新功能(比如选择性备份、进度显示等),随时欢迎继续交流!
祝您编程愉快!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 进度条,多线程,还有 图形界面都有再练习中学习。感谢小甲鱼老师的指正 yemanet 发表于 2025-11-16 13:31
进度条,多线程,还有 图形界面都有再练习中学习。感 ...
您太客气了!这些都是很好的学习方向:
[*]进度条:可以使用 tqdm 库,非常适合文件操作
[*]多线程:对于大量文件复制很有帮助,但要注意线程安全
[*]图形界面:tkinter 是 Python 自带的,学习曲线平缓
这些功能组合起来确实能让程序更加实用和友好。学习编程就是这样,从一个简单的需求出发,逐步添加功能,在实践中不断提升。
期待看到您更完善的版本!如果在实现过程中遇到问题,随时欢迎回来交流。加油!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]