如何提升自己的 python 能力呢?直接找项目写,但是作为零基础 / 小白 / 入门 的你来说做一个博客还要学 web 框架、html、css、js,又成为了阻碍你写实际项目的阻碍。
所以我就推荐了这个命令:ls。写一个 ls 非常简单,你只需要会一点 linux 的基础知识,知道 ls 能做什么就好了。
那今天小金就给大家码了一个哪哪能用的 ls.py ,没错,windows 也可以哦~
演示环境
– 操作系统:windows10
– python版本:python 3.7
– idea:pycharm 2018.2
– 使用模块:argparse, os
了解argparse模块
argparse是python的标准库,他可以使我们很友好的编写命令行界面,并且可以自动生成帮助文档和使用消息,还能在参数无效的时候发出错误。
argparse.ArgumentParse类参数理解
1. prog:改变应用的名字,我们可以使用`%(prog)s`引用应用的名字,默认的应用名字为文件名。
2. usage:显示这个命令用法, 一般用来显示参数的用法
3. description:显示这个命令的帮助信息
4. epilog:显示命令的帮助信息,位置在参数的下面
argparse.ArgumentParser.add_argument函数理解
1. name | flags:指定参数的名字
2. action: 指定命令行参数,内置为以下几种
– store: 默认值,仅仅保存参数值。
– store_const: 与store基本一致,但是只保存const关键字指定的值,其它的值会报错
– store_true | store_false: 与store_const基本一致,只保存True和False
– append: 将相同参数的不同值保存在一个list中
– count: 统计参数出现的次数
– help: 输出程序的帮助信息
– version: 输出程序版本信息
3. nargs:将不同数量的值与一个参数关联起来
– nargs=N:N为整数
– nargs=\’?\’
– nargs=\’*\’: 将所有的参数保存在列表中
– nargs=\’ \’: 将所有的参数保存在列表中,但是至少得有一个参数
– nargs=argparse.REMAINDER: 其余的参数全部保存在一个list中
4. default:如果没有传入这个参数,默认使用default参数的值
5. type:接收到的参数会经过这个参数对应的函数处理。
6. choices:将参数指定在一个范围内,超出就报错
7. required:指定参数是否为必传参数。
8. dest:自定义参数的名称,默认名称为 “- 后面的值” 或者 “– 后面的值”。
编写ls命令脚本
这里我们就简单的指定三个参数.
– -a:添加 -a 参数,显示隐藏文件。
– -r: 添加 -r 参数,递归显示文件夹下面的文件。
– -d: 指定显示目录,如果不指定,默认为当前目录。
首先我们使用 ArgumentParser 类来指定参数。
import os
import argparse
parser = argparse.ArgumentParser(prog=\'ls\', description=\'显示文件夹下的文件\')
# 指定参数
parser.add_argument(\'-a\', \'--all\', const=True, nargs=\'?\', help=\'是否显示隐藏文件\')
parser.add_argument(\'-d\', \'--directory\', help=\'指定显示的目录,如果不指定,默认为当前目录\')
parser.add_argument(\'-r\', \'--recursion\', const=True, nargs=\'?\', help=\'是否递归显示\')
# 解析参数
args = parser.parse_args()
# 拿到directory参数,如果没有传这个参数,为None
directory = args.directory
# 如果directory有值
if directory:
# 如果指定目录不存在,抛出异常
if not os.path.exists(directory):
raise ValueError(f\'{directory} does`t exist\')
# 如果directory不是一个目录,抛出异常
if not os.path.isdir(directory):
raise ValueError(f\'{directory} is not a directory\')
# 如果directory为None,给directory赋值
else:
directory = \'.\'
我们规定好参数之后,接下来就是具体ls的实现。我们封装一个 LsCommand 类
class LsCommand():
def __init__(self, show_all=False, directory=\'.\', recursion=False):
\'\'\'
:param show_all: 是否显示隐藏文件
:param directory: 指定的文件目录
:param recursion: 是否递归显示目录下的文件
\'\'\'
self.show_all = show_all
self.recursion = recursion
self.directory = os.path.abspath(directory)
def handle_dir(self, directory, grade=1, placeholder=\'--\'):
\'\'\'
处理目录
:param directory: 文件目录
:param grade: 目录层级
:param placeholder: 子目录文件前面的占位符
:return:
\'\'\'
# 判断是否为文件夹
# grade是否增加过了
# os.listdir: 列出当前文件夹下面的所有文件和文件夹
# 遍历目录下的文件,文件夹
pass
def show_file_or_dir(self, file, prefix=\'\'):
# 如果不显示隐藏文件
# 打印前缀和文件名
pass
def run(self):
\'\'\'
运行ls命令
:return:
\'\'\'
# os.listdir(dir) 得到dir目录下所有文件,文件夹
# 遍历self.directory目录先所有文件,文件夹
pass
ls这个类我们也封装好了,接下来我们将得到的参数传入 LsCommand 类中,然后运行,就可以愉快的得出结果。
ls = LsCommand(bool(args.all), directory, bool(args.recursion))
ls.run()
效果展示:
python ls.py
python ls.py -a
python ls.py -a -r
python ls.py -d ./temp
声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。导航:艺宵博客 » 用python把linux命令写一遍的人处于编程的什么水平?