如何用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
相关产品推荐
相关产品推荐

