locale
1 | import locale |
pathlibos.path1 | os.path.isdir(r"C:\Users") |
os.stat配合stat模块有更丰富的功能
1 | pfile = os.path.join(r"C:\temp", "output.txt") |
os.sep配合字符串.join、.split方法可以实现基本相同 效果
fileinputstatstat:包含os.stat信息相关常量、函数以便跨平台使用
1 | import stat |
os.path中包含常用部分相同功能函数
globglob.glob1 | import glob |
参数
pathname:文件名模式?:单个字符*:任意字符[]:字符选集.开头路径不被以上?、*匹配recursiveFalse:默认True:**将递归匹配所有子目录、文件返回值:匹配文件名列表
glob.glob是利用glob.fnmatch模块匹配名称模式
shutilshutil模块:包含文件操作相关
fnmatchlinecachemacpathfilecmptempfileosos:与Python所在底层操作系统相对应变量、函数
os模块提供了POSIX工具
os.path包含在C程序、shell脚本中经常用到的所有操作系统调用,涉及 目录、进程、shell变量
实践中,os基本可以作为计算机系统调用的可移植接口
使用
os模块都能跨平台os提供专属该平台的工具1 | os.environ |
os.environos.environ可以向普通字典一样键索引、赋值
默认继承系统所有环境变量、命令行临时环境变量
在最新的python中,对os.environ的键值修改将自动导出
到应用的其他部分
os.environ对象os.putenv生效,
反之不会更新os.environpython进程、链入C模块、该进程派生子进程都可以获取新的 赋值
os.putenvos.putenv同时会调用C库中的putenv(若在系统中可用)
导出设置到python链接的C库
putenv则可将os.environ作为参数传递1 | os.getpid() |
1 | os.sep |
||Linux|Win|Unix|
|———|——————|———|———|
|sep|/|\|/(某些MAC:)|
|pathsep|:|;||
|curdir|.|||
|pardir|..|||
|linesep|\n|\r\n||
- win下目录组分隔符是
\,大部分情况下看到\\是作为\转义字符,防止\和之后字符转义
- 确认不会转义时,直接使用
\也是可以的- 使用
r''表示不转义也可以直接使用\
1 | os.mkdir(dirname) |
os.listdir返回值:包含目录中所有条目名称的列表
需要注意的是:文件名同样有编码
open函数也可以类似使用字节串确定需要打开的文件glob.glob,os.walk内部都是通过调用os.listdir实现,行为相同
glob模块也有遍历目录的能力
os.walk返回值:返回迭代器
(dirname, subdirs, subfile)参数
topdown:默认True,自顶向下返回1 | descriptor = os.open(path, flags, mode) |
os通过调用文件的描述符来处理文件
基于文件描述符的文件以字节流形式处理
文件流对象、工具仅仅是在基于描述符的文件的封装
可以通过.fileno()获得文件流对象对应文件描述符,
sys.stdin、sys.stdout、sys.stderr对应文件
描述符是:0、1、2
1 | os.write(1, b"hello world\n") |
可以通过os.fdopen把文件描述符封装进文件流对象
1 | fdfile = os.open("filename", (os.O_RDWR|os.O_BINARY)) |
os.open1 | def os.open(path, |
参数
mode:需要模式标识符进行二进制操作以得到需要的模式
os.O_RDWRos.O_RDONLYos.O_WRONLYos.O_BINARYos.O_EXCL:唯一访问权,是python在并发、进程
同步情况下锁定文件最便捷的方法os.O_NONBLOCK:非阻塞访问
- 其他模式选项参见
os模块
返回值:文件描述符
1 | os._exit(0) |
iotimeargparseargparse:编写用户友好的命令行接口
argparse.ArgumentParser1 | class argparse.ArgumentParser: |
1 | # 添加参数 |
action:关联命令行参数、动作,除以下预定义行为,
还可以传递argparse.Action子类、相同接口类store:存储值,默认行为store_const:存储const指定值,通常用于在
选项中指定标志store_true/"store_false":类上append:存储列表,适合多次使用选项append_const:将const参数值追加至列表,
适合多个选项需要在同一列表中存储常数
(即多个dest参数相同)count:计算选项出现次数help:打印完整帮助信息version:打印version参数值- `nargs`:参数消耗数目,指定后`pare_args`返回列表,
否则参数消耗由`action`决定
- `int`:消耗参数数目,`nargs=1`产生单元素列表,
和默认不同
- `?/*/+`:类似普通正则,`+`会在没有至少一个参数时
报错
- `argparse.REMAINDER`:所有剩余参数,适合用于从
命令行传递参数至另一命令行
- `const`:保存不从命令行读取、被各种动作需求的常数
- `action="store_const"/"append_const"`:必须给出
- `nargs=?`:气候选项没有参数时,使用`const`替代
- `type`:允许任何类型检查、类型转换,一般内建类型、
函数可以直接使用
- `argparse.FiltType("w")`:为文件读写方便,预定义
类型转换
- `dest`:`parse_args()`返回的参数属性名
- 位置选项:缺省为首个选项名
- 关键字选项:优秀首个`--`开头长选项名,选项目中间
`-`被替换为`_`
1 | # 解析参数,无法解析则报错 |
1 | def add_subparsers(self, |
1 | class argparse.Action: |
1 | class argparse.ArgumentDefaultHelpFormatter |
1 | # 容纳属性的类 |
getoptoptparselogginglogging.configlogging.handlersgetpasscursescurses.textpadcurses.asciicurses.panelplatformerrnoctypesbuiltinsfilter(iterable, func):过滤func返回布尔否值元素enumerate(iterable):添加索引迭代zip(*iterables):打包迭代元素map(func, *iterables):func接受各迭代器中元素作为
参数调用(类似zip)iter:两种产生迭代器的模式iter(iterable):返回迭代器iter(callable, sentinel):调用callable直到返回
sentinel停止迭代(不包括)while循环itertoolsitertools:包含为高效循环而创建迭代器的函数
count(start, step=1):步长累加cycle(p):循环p中元素repeat(elem, n=None):重复elemaccumulate(p, func=None):累加p中元素chain(*iters):链接迭代器chain.from_iterable(iterable):链接可迭代对象中迭代器compress(data, selelctors):根据selectors选取datadropwhile(pred, seq):保留首个满足pred之后所有元素takewhile(pred, seq):保留首个不满足pred之前元素filterfalse(pred, seq):反filtergroupby(iterable, key=None):根据key(v)值分组迭代器islice(seq, start=0, stop=None, step=1):切片starmap(func, seq):迭代对seq中执行func(*elem)tee(iterable, n=2):复制迭代器,默认2个zip_longes(*iters, fillvalue):依最长迭代器zip,较短
循环填充或fillvalue填充product(*iters, repeat=1):笛卡尔积permutations(p, r=None):r长度的排列,缺省全排列combinations(p, r):r长度组合combinations_with_replacement(p,r):可重复组合functoolsfunctools:包含高阶函数,即参数、返回值为其他函数的函数
cmp_to_key(func):将旧式比较函数转换新式key function
key参数中转换旧式比较函数sortedminmaxheapq.nlargestheapq.nsmallestitertools.groupby
- key function:接收参数,返回可以用于排序的值
partial(func, *args, **kwargs):返回partial对象,其
调用时类似使用args、kwargs调用func
partial.method(func, *args, **kwargs):适合类命名空间
中函数、描述器
update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, udpated=WRAPPER_UPDATES):
更新wrapper函数信息为wrapped函数信息
reduce(func, iterable[, initializer]):使用func接受
两个参数,reduce处理iterable@lru_cache(maxsize=128, typed=False):缓存函数执行结果
- 可以用于方便实现动态规划
@singledispatch:转换函数为单分派范型函数,实现python
的重载(接口多态)
- single dispatch:单分派,基于单个参数类型分派的 范型函数分派形式
@wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES):
等价于partial(update_wrapper, wrapped, assigned, updated)
@total_ordering:根据类中已定义比较方法实现剩余方法__eq__、其他富比较方法中任意一种operatoroperator:提供与python内置运算符对应的高效率函数
lt(a,b)/__lt__(a,b)le(a,b)eq(a,b)ne(a,b)ge(a,b)gt(a,b)not(obj)truth(obj):等价于使用bool构造器is_(a,b)is_not(a,b)add(a,b)sub(a,b)mul(a,b)div(a,b)pow(a,b)mod(a,b)floordiv(a,b)truediv(a,b)matmul(a,b)abs(obj)neg(obj)pos(obj)
- 在位运算对可变数据类型才会更新参数,否则只返回结果
iadd(a,b):等价于a += bisub(a,b)imul(a,b)idiv(a,b)ipow(a,b)imod(a,b)ifloordiv(a,b)itruediv(a,b)imatmul(a,b)and_(a,b)or_(a,b)xor(a,b)inv(obj)/invert(obj)lshift(a,b)shift(a,b)iand(a,b)ior(a,b)ixor(a,b)index(a)concat(a,b)contains(a,b)countOf(a,b)delitem(a,b)getitem(a,b)indexOf(a,b)setitem(a,b,c)length_hint(obj, default=0)attrgetter(attr)/attrgetter(*attrs):返回函数,函数
返回值为参数属性attritemgetter(item)/itemgetter(*items):类似methodcaller(name[, args...]):类似