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

如何通过数字输入选择列表文件并实现输入合法性校验?

实现数字选择文件删除功能(带输入验证)

我来帮你完善这个文件删除功能,下面是完整的可运行代码,我会详细解释每个关键部分:

import os

# 定义目标文件夹路径,方便后续修改
calendar_dir = os.path.expanduser("~/Desktop/Sam's Calendar")

# 获取文件夹中的所有文件(排除子文件夹)
files = [f for f in os.listdir(calendar_dir) if os.path.isfile(os.path.join(calendar_dir, f))]

# 处理空文件列表的情况
if not files:
    print("No reminders exist in the directory.")
    exit()

# 展示带编号的文件列表(显示去掉扩展名的名称)
print("The following reminders currently exist:\n")
for idx, filename in enumerate(files, 1):
    display_name = os.path.splitext(filename)[0]
    print(f"{idx}. {display_name}")

# 循环获取用户输入,直到输入有效
while True:
    deletion_input = input("\nPlease select the number corresponding to the reminder you want to delete.\n\n")
    try:
        # 尝试将输入转为整数
        selection = int(deletion_input)
        # 验证数字是否在有效范围内
        if 1 <= selection <= len(files):
            break
        else:
            print(f"❌ Error: Please enter a number between 1 and {len(files)}.")
    except ValueError:
        # 处理非数字输入的情况
        print("❌ Error: Please enter a valid integer (e.g., 1, 2).")

# 获取要删除的文件的完整路径
target_file = os.path.join(calendar_dir, files[selection - 1])

# 执行删除操作并处理可能的异常
try:
    os.remove(target_file)
    print(f"✅ Successfully deleted reminder: {os.path.splitext(files[selection - 1])[0]}")
except OSError as e:
    print(f"❌ Failed to delete file: {str(e)}")

关键功能说明:

  • 保留完整文件名:原代码中去掉了文件扩展名,但删除操作需要完整文件名,所以我们先存储带扩展名的文件列表,展示时再提取无扩展名的名称给用户看。
  • 输入验证机制:
    • 用try-except捕获非数字输入的错误,提示用户输入有效整数
    • 检查输入数字是否在1到文件总数的范围内,拒绝0或超出范围的输入
    • 用while True循环确保用户输入有效后才继续执行
  • 边界情况处理:如果文件夹里没有文件,直接提示并退出,避免后续代码报错
  • 安全删除:用try-except包裹删除操作,处理文件不存在、权限不足等异常,给用户清晰的反馈

内容的提问来源于stack exchange,提问作者KungenSam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:02:48