python删除当前目录下图片(也可以改改删别的)

本文讲述了由于在当前目录下生成过多图片(超过100000张)导致电脑运行缓慢的问题,并分享了一段Python代码来删除指定类型的图片(.png和.jpg)。代码通过os模块的listdir方法获取文件名,然后根据文件名后缀判断并删除图片,避免了使用os.walk可能导致的复杂性。通过这段代码,你可以快速清理大量图片,恢复电脑正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不小心在当前目录生成了100000多张图片,结果电脑直接接近宕机。参考网上例子可以实现,这里没有使用os.walk,原因我没看到walk如何保留子目录下的内容,也许可以每个文件都判断是否为目录?那也太麻烦了,我们直接用后缀。

import os
path = './' #添加自己的相对路径
files= os.listdir(path) #得到文件夹下的所有文件名称
print(files[0:10])#看一看文件都有啥

for pic in files: #遍历文件夹
     
    if pic.endswith(".png"):           
        os.remove(path+'/'+pic)
    elif pic.endswith(".jpg"): 
        os.remove(path+'/'+pic)

这里针对于jpg和png,大家可以看看自用

经评论,现在加了一个path,自行更改

<think>我们首先需要明确用户的需求:删除当前目录下的所有文件和子目录,但保留当前目录本身。 注意:这个操作非常危险,因为它会永久删除文件。因此,在编写代码时,我们需要谨慎并给出明确警告。 步骤: 1. 导入必要的模块:os和shutil(shutil用于删除非空目录) 2. 获取当前目录的路径。 3. 遍历当前目录下的所有文件和子目录。 4. 对于每个文件,直接删除。 5. 对于每个子目录,使用shutil.rmtree删除整个目录树(包括其所有内容)。 但是,请注意:当前目录下可能包含隐藏文件或目录,我们也需要删除它们。 另外,为了避免误操作,特别是删除重要文件,我们可以在代码中先打印出将要删除的文件和目录,并让用户确认。或者,我们可以先将要删除的文件和目录移动到回收站,而不是永久删除。然而,Python标准库中没有直接提供移动到回收站的功能(在不同操作系统中方法不同),所以这里我们将使用永久删除,但会要求用户确认。 考虑到安全性,我们将设计一个函数,要求用户明确输入当前目录的路径(或者使用一个安全机制,比如不允许删除某些特定目录)?但是用户要求的是当前目录。 我们可以这样做: - 先列出当前目录下的所有内容。 - 然后让用户确认是否删除这些内容。 - 如果用户确认,则执行删除。 但是,用户要求的是“删除当前目录下的所有文件和子目录”,所以我们只删除当前目录下的内容,而当前目录本身保留。 代码步骤: 1. 获取当前工作目录。 2. 列出当前目录下的所有文件和目录(包括子目录)。 3. 循环遍历每个条目: 如果是文件,则删除文件。 如果是目录,则使用shutil.rmtree删除整个目录。 4. 注意:在删除之前,先打印出将要删除的内容,并让用户确认。 但是,由于用户可能希望自动化执行,我们可以不要求确认,但这样非常危险。因此,我们将在代码中强制要求用户确认当前目录的路径,并输入一个确认字符串。 另一种做法:我们可以提供一个函数,但要求用户传入一个参数,这个参数必须是当前目录的绝对路径,以确认用户确实知道自己在做什么。 考虑到用户可能是在交互式环境中运行,我们可以这样设计: 代码实现: ```python import os import shutil def delete_all_in_directory(directory_path, confirm=True): """ 删除指定目录下的所有文件和子目录,保留该目录本身。 参数: directory_path (str): 要清空的目录路径。 confirm (bool): 是否进行交互式确认,默认为True。 返回: None """ # 确保目录路径是绝对路径 directory_path = os.path.abspath(directory_path) # 列出目录下所有内容 contents = [os.path.join(directory_path, name) for name in os.listdir(directory_path)] if confirm: print(f"您将要删除以下目录中的所有内容: {directory_path}") print("以下是即将被删除的条目:") for item in contents: print(item) # 要求用户输入确认 user_input = input(f"确定要删除 {directory_path} 下的所有文件和子目录吗? (输入'yes'确认): ") if user_input.strip().lower() != 'yes': print("操作已取消。") return # 开始删除 for item in contents: if os.path.isfile(item) or os.path.islink(item): # 删除文件或符号链接 os.remove(item) elif os.path.isdir(item): # 删除整个目录 shutil.rmtree(item) print(f"已完成删除。目录 {directory_path} 已被清空。") # 示例调用:删除当前目录下的所有内容 # 注意:请谨慎使用!这个操作不可逆。 # delete_all_in_directory(os.getcwd()) ``` 警告:这个函数会永久删除指定目录下的所有文件和子目录,且不可恢复。因此,在使用时务必谨慎。 用户如果想删除当前目录,可以这样调用: delete_all_in_directory(os.getcwd()) 但是,我们强烈建议用户先在一个测试目录中尝试,确保理解其行为。 另外,注意:如果目录中有只读文件,使用os.remove可能会抛出异常。我们可以增加错误处理,但这里为了简单,我们先不考虑,或者我们可以使用一个更健壮的方法:删除只读文件。 在Windows上,只读文件需要用os.chmod改变权限才能删除。我们可以写一个辅助函数来安全删除。 改进:增加一个安全删除文件的函数,处理权限问题。 由于不同操作系统的权限处理不同,我们可以尝试: ```python def safe_remove(path): try: os.remove(path) except PermissionError: # 如果是文件且没有写权限,则修改权限再删除 os.chmod(path, 0o666) # 赋予读写权限 os.remove(path) ``` 同样,对于目录,shutil.rmtree也有一个参数可以处理权限问题:`ignore_errors`,但最好使用onerror回调来处理错误。我们可以写一个更健壮的删除函数。 不过,为了保持代码简洁,我们可以在上面的循环中捕获异常并尝试修改权限再删除。但考虑到用户可能不需要如此复杂,而且用户要求的是当前目录,通常用户有权限,所以我们先提供基本版本,然后给出一个更健壮的版本作为可选。 这里我们提供一个更健壮的版本: ```python import os import shutil import stat def handle_remove_error(func, path, exc_info): """ 处理删除文件或目录时出现的权限错误。 """ # 如果出现权限错误,尝试修改权限并重试 if func in (os.remove, os.unlink) and os.path.exists(path): os.chmod(path, stat.S_IWRITE) func(path) elif func == os.rmdir: # 对于目录,可能需要修改目录内文件的权限 shutil.rmtree(path, ignore_errors=False, onerror=handle_remove_error) def delete_all_in_directory(directory_path, confirm=True): directory_path = os.path.abspath(directory_path) contents = [os.path.join(directory_path, name) for name in os.listdir(directory_path)] if confirm: print(f"您将要删除以下目录中的所有内容: {directory_path}") print("以下是即将被删除的条目:") for item in contents: print(item) user_input = input(f"确定要删除 {directory_path} 下的所有文件和子目录吗? (输入'yes'确认): ") if user_input.strip().lower() != 'yes': print("操作已取消。") return for item in contents: try: if os.path.isfile(item) or os.path.islink(item): # 尝试删除文件或链接 safe_remove(item) elif os.path.isdir(item): # 使用自定义错误处理来删除目录 shutil.rmtree(item, onerror=handle_remove_error) except Exception as e: print(f"删除 {item} 时出错: {str(e)}") print(f"已完成删除。目录 {directory_path} 已被清空。") def safe_remove(path): try: os.remove(path) except PermissionError: # 修改文件权限并重试 os.chmod(path, stat.S_IWRITE) os.remove(path) ``` 注意:上面的`handle_remove_error`函数用于处理目录删除中的错误,当删除目录中的文件遇到权限错误时,会调用此函数。这样,我们可以递归地处理目录中的只读文件。 但是,由于代码相对复杂,用户如果不需要处理权限问题,可以使用第一个简单版本。我们这里提供一个折中版本,只处理文件删除时的权限错误,目录删除使用shutil.rmtree并忽略错误(但这样可能不彻底),或者使用我们自定义的错误处理。 考虑到跨平台和健壮性,我们采用上述第二个版本。 最后,提醒用户:这个操作不可逆,务必谨慎。 因此,我们给用户的代码是: ```python import os import shutil import stat def safe_remove(path): try: os.remove(path) except PermissionError: # 修改文件权限并重试 os.chmod(path, stat.S_IWRITE) os.remove(path) def handle_remove_error(func, path, exc_info): # 如果出现权限错误,尝试修改权限并重试 if func in (os.remove, os.unlink) and os.path.exists(path): os.chmod(path, stat.S_IWRITE) func(path) elif func == os.rmdir: # 对于目录,可能需要递归处理 shutil.rmtree(path, ignore_errors=False, onerror=handle_remove_error) def delete_all_in_directory(directory_path, confirm=True): """ 删除指定目录下的所有文件和子目录(保留该目录),处理权限问题。 参数: directory_path (str): 要清空的目录路径。 confirm (bool): 是否进行交互式确认,默认为True。 返回: None """ directory_path = os.path.abspath(directory_path) # 如果目录不存在,则返回 if not os.path.exists(directory_path): print(f"目录 {directory_path} 不存在。") return # 列出目录下所有内容 try: contents = [os.path.join(directory_path, name) for name in os.listdir(directory_path)] except FileNotFoundError: # 可能在列出过程中目录已经被删除?但上面已经检查过存在,所以这种情况很少 print(f"无法列出 {directory_path} 中的内容。") return if confirm: print(f"您将要删除以下目录中的所有内容: {directory_path}") print("以下是即将被删除的条目:") for item in contents: print(item) user_input = input(f"确定要删除 {directory_path} 下的所有文件和子目录吗? (输入'yes'确认): ") if user_input.strip().lower() != 'yes': print("操作已取消。") return # 逐个删除 for item in contents: try: if os.path.isfile(item) or os.path.islink(item): safe_remove(item) elif os.path.isdir(item): # 使用自定义错误处理来删除目录 shutil.rmtree(item, onerror=handle_remove_error) except Exception as e: print(f"删除 {item} 时出错: {str(e)}") print(f"已完成删除。目录 {directory_path} 已被清空。") # 使用示例:删除当前目录下的所有内容 # 请谨慎使用!以下代码会永久删除当前工作目录下的所有文件和子目录。 # delete_all_in_directory(os.getcwd()) ``` 用户调用时,只需调用`delete_all_in_directory(os.getcwd())`即可,但必须输入确认。 如果用户不想交互确认,可以设置`confirm=False`,但这样非常危险,不推荐。 最后,我们生成几个相关问题。 注意:根据用户指令,我们需要生成相关问题。 相关问题: 1. 如何在不删除当前目录本身的情况下清空当前目录? 2. 如何安全地删除只读文件? 3. 如何递归删除目录中的文件而忽略权限错误? 4. 在Python中如何删除符号链接而不影响目标文件或目录? 5. 如何将文件移动到回收站而不是永久删除? 我们根据回答内容,提出以下问题: §§相关问题§§ 1. 如何安全地使用Python删除目录中的所有内容? 2. 在删除文件时遇到权限错误(PermissionError)应该如何处理? 3. 如何在不要求用户确认的情况下删除文件? 4. 如何只删除当前目录中的文件而不删除子目录? 5. 如何删除隐藏文件或系统文件?</think>### Python删除当前目录下所有文件和子目录的方法 要安全删除当前目录下的所有文件和子目录(包括隐藏文件),同时保留当前目录本身,可以使用以下Python代码: ```python import os import shutil def clear_current_directory(): """ 删除当前工作目录下的所有文件和子目录,保留当前目录本身 """ current_dir = os.getcwd() # 获取当前工作目录 # 遍历当前目录中的所有条目 for item in os.listdir(current_dir): item_path = os.path.join(current_dir, item) try: if os.path.isfile(item_path) or os.path.islink(item_path): # 删除文件或符号链接 os.unlink(item_path) elif os.path.isdir(item_path): # 递归删除子目录及其内容 shutil.rmtree(item_path) except Exception as e: print(f"删除 {item_path} 失败: {str(e)}") print("当前目录已清空") # 执行清空操作 clear_current_directory() ``` ### 关键说明: 1. **`shutil.rmtree()`**:递归删除目录及其所有内容 2. **`os.unlink()`**:删除单个文件或符号链接 3. **`os.listdir()`**:列出目录中的所有条目(包括隐藏文件) 4. **安全特性**: - 保留当前目录本身(只删除其内容) - 异常处理防止部分删除失败导致程序中断 - 处理所有类型的文件系统对象(文件、目录、符号链接) ### 重要警告: ⚠️ **此操作不可逆**!执行前请确保: 1. 已备份重要文件 2. 当前工作目录正确 3. 没有打开目录中的任何文件 4. 具有足够的文件系统权限 ### 替代方案(仅删除文件保留目录): 如果只需删除文件而保留所有子目录结构: ```python def delete_files_only(): for root, dirs, files in os.walk(os.getcwd()): for file in files: file_path = os.path.join(root, file) try: os.unlink(file_path) except Exception as e: print(f"删除 {file_path} 失败: {str(e)}") ``` ### 使用建议: 1. 测试时先在临时目录运行 2. 添加确认提示: ```python confirm = input("确定要清空当前目录吗? (yes/no): ") if confirm.lower() == 'yes': clear_current_directory() ``` [^1]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值