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

如何用Python编写支持touch(filename)等命令的文件管理器?

实现支持touch(文件名)格式的Python控制台文件管理器

核心需求

  • 支持控制台输入类Shell命令:pwd、cd(目录名)、touch(文件名)、cat(文件名)、ls、rm(文件名/目录名)
  • 替换原两步式的create命令,改为直接通过touch(文件名)完成文件创建,无需二次输入文件名

实现方案

1. 命令解析逻辑

首先需要一个函数来解析用户输入的命令,区分无参数命令(如pwd、ls)和带括号参数的命令(如touch(foo.txt)):

import os
import shutil

def parse_command(input_str):
    input_str = input_str.strip()
    if '(' in input_str and ')' in input_str:
        # 分离命令名和括号内的参数
        cmd = input_str[:input_str.index('(')].strip()
        arg = input_str[input_str.index('(')+1 : input_str.index(')')].strip()
        return (cmd, arg)
    else:
        return (input_str.strip(), None)

2. 完整命令处理实现

将原create命令的逻辑整合到touch命令的处理中,同时补充其他所需命令的实现:

while True:
    # 以当前路径作为提示符
    prompt = f"{os.getcwd()}> "
    inp = input(prompt)
    cmd, arg = parse_command(inp)

    if cmd == "pwd":
        print(os.getcwd())
    elif cmd == "cd":
        if not arg:
            print("请输入格式:cd(目录名)")
            continue
        try:
            os.chdir(arg)
        except FileNotFoundError:
            print(f"错误:目录 {arg} 不存在")
        except NotADirectoryError:
            print(f"错误:{arg} 不是有效目录")
    elif cmd == "touch":
        if not arg:
            print("请输入格式:touch(文件名)")
            continue
        try:
            with open(arg, 'w') as f:
                f.write('Create a new text file!')
            print(f"文件 {arg} 创建成功")
        except Exception as e:
            print(f"创建失败:{str(e)}")
    elif cmd == "cat":
        if not arg:
            print("请输入格式:cat(文件名)")
            continue
        try:
            with open(arg, 'r') as f:
                print(f.read())
        except FileNotFoundError:
            print(f"错误:文件 {arg} 不存在")
        except IsADirectoryError:
            print(f"错误:{arg} 是目录,无法读取")
    elif cmd == "ls":
        # 列出当前目录下所有条目
        for item in os.listdir(os.getcwd()):
            print(item)
    elif cmd == "rm":
        if not arg:
            print("请输入格式:rm(文件名/目录名)")
            continue
        try:
            if os.path.isfile(arg):
                os.remove(arg)
                print(f"文件 {arg} 删除成功")
            elif os.path.isdir(arg):
                shutil.rmtree(arg)
                print(f"目录 {arg} 删除成功")
            else:
                print(f"错误:{arg} 不存在")
        except Exception as e:
            print(f"删除失败:{str(e)}")
    elif cmd.lower() == "exit":
        break
    else:
        print(f"未知命令:{cmd}")

关键修改说明

  • 移除了原有的create命令,将文件创建逻辑直接绑定到touch命令,通过解析输入字符串中的参数直接获取文件名,无需二次输入
  • 统一了带参数命令的格式(使用括号包裹参数),让所有命令的输入风格保持一致
  • 增加了错误处理逻辑,针对不存在的文件/目录、权限问题等给出明确提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:20:40