模块pathlib提供表示文件系统路径的类,其语义适用于不同的操作系统。路径类分为纯路径(提供没有 I/O 的纯计算操作)和从纯路径继承但提供 I/O 操作的具体路径。
_images/pathlib-inheritance.png
如果您以前从未使用过此模块,或者只是不确定哪个类适合您的任务,则 Path很可能是您需要的。它实例化了代码运行的平台的具体路径。
纯路径在某些特殊情况下很有用;例如:
如果要在 Unix 计算机上操作 Windows 路径(反之亦然)。在 Unix 上运行时,您无法实例化 WindowsPath,但可以实例化PureWindowsPath。
您希望确保代码仅操作路径,而不实际访问操作系统。在这种情况下,实例化纯类之一可能很有用,因为这些类根本不具有任何操作系统访问操作。
详细信息请查看:https://pathlib.readthedocs.io/en/pep428/
在当前目录以及当前目录的所有子目录下查找目录和文件,并打印出相对路径:
以下是实现源码:
from pathlib import Path
import sys
import argparse
def name_find(start, args):
for f in start.rglob(args.name):
print(f)
def type_find(start, args):
if args.type not in [‘d’,‘f’]:
print(f"Unknown type: {args.type}")
sys.exit(1)
for f in start.rglob("*"):
if args.type == 'd' and f.is_dir():
print(f)
elif args.type == 'f' and f.is_file():
print(f)
else:
pass
def find_file(args):
start_path = Path(args.start[0])
if args.name and not args.type:
name_find(start_path, args)
elif args.type:
type_find(start_path, args)
else:
print("You need either --name and --type")
sys.exit(1)
def argpase_args():
parser = argparse.ArgumentParser()
parser.add_argument('start',type=str,nargs=1)
parser.add_argument('--name',type=str)
parser.add_argument('--type',type=str)
return parser.parse_args()
find_file(argpase_args())