常用标准库
1 os:访问操作系统相关功能。跨平台,系统相关,目录及文件操作,执行命令和管理进程。
1 系统相关
>>> import os
>>> os.name
'nt'
>>> os.environ
environ({'ALLUSERSPROFILE': 'C:\\ProgramData',......
>>> os.sep
'\\'
>>> os.altsep
'/'
>>> os.extsep
'.'
>>> os.pathsep
';'
>>> os.linesep
'\r\n'
>>> os.devnull
'nul'
>>> os.defpath
'.;C:\\bin'
2 文件及目录操作
方法和变量 用途 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') os.makedirs('dir1/dir2') 可生成多层递归目录 os.removedirs(‘dirname1’) 递归删除空目录(要小心) os.mkdir('dirname') 生成单级目录 os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除并报错 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件 os.remove('filename') 删除一个文件 os.rename("oldname","new") 重命名文件/目录 os.stat('path/filename') 获取文件/目录信息 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如果path以/或\结尾,那么就会返回空值。 os.path.exists(path或者file) 如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) 如果path是绝对路径,返回True os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 os.path.getsize(filename) 返回文件包含的字符数量
os.walk(top, topdown=True, onerror=None, followlinks=False)
walk方法是os模块中非常重要和强大的一个方法。可以帮助我们非常便捷地以递归方式自顶向下或者自底向上的方式遍历目录树,对每一个目录都返回一个三元元组(dirpath, dirnames, filenames)。
dirpath - 遍历所在目录树的位置,是一个字符串对象
dirnames - 目录树中的子目录组成的列表,不包括("."和"..")
filenames - 目录树中的文件组成的列表
如果可选参数onerror被指定,则onerror必须是一个函数,该函数有一个OSError实例的参数,这样可以允许在运行的时候即使出现错误的时候不会打断os.walk()的执行,或者抛出一个异常并终止os.walk()的运行。通俗的讲,就是定义这个参数用于指定当发生了错误时的处理方法。
默认情况下,os.walk()遍历的时候不会进入符号链接,如果设置了可选参数followlinks = True,则会进入符号链接。注意,这可能会出现遍历死循环,因为符号链接可能会出现自己链接自己的情况,而os.walk()没有那么高的智商,无法发现这一点。
3 直接执行命令
os.system(command)
os.popen(command,[mode,[bufsize]]):开启一个子进程执行command参数指定的命令,在父进程和子进程之间建立一个管道pipe,用于在父子进程间通信。该方法返回一个文件对象,可以对这个文件对象进行读或写,取决于参数mode,如果mode指定了只读,那么只能对文件对象进行读,如果mode参数指定了只写,那么只能对文件对象进行写操作。
2 sys:针对于python解释器相关的变量和方法,不是主机操作系统。
属性及方法 使用说明 sys.argv 获取命令行参数列表,第一个元素是程序本身 sys.exit(n) 退出Python程序,exit(0)表示正常退出。当参数非0时,会引发一个SystemExit异常,可以在程序中捕获该异常 sys.version 获取Python解释程器的版本信息 sys.maxsize 最大的Int值,64位平台是2**63 - 1 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称 sys.stdin 输入相关 sys.stdout 输出相关 sys.stderr 错误相关 sys.exc_info() 返回异常信息三元元组 sys.getdefaultencoding() 获取系统当前编码,默认为utf-8 sys.setdefaultencoding() 设置系统的默认编码 sys.getfilesystemencoding() 获取文件系统使用编码方式,默认是utf-8 sys.modules 以字典的形式返回所有当前Python环境中已经导入的模块 sys.builtin_module_names 返回一个列表,包含所有已经编译到Python解释器里的模块的名字 sys.copyright 当前Python的版权信息 sys.flags 命令行标识状态信息列表。只读。 sys.getrefcount(object) 返回对象的引用数量 sys.getrecursionlimit() 返回Python最大递归深度,默认1000 sys.getsizeof(object[, default]) 返回对象的大小 sys.getswitchinterval() 返回线程切换时间间隔,默认0.005秒 sys.setswitchinterval(interval) 设置线程切换的时间间隔,单位秒 sys.getwindowsversion() 返回当前windwos系统的版本信息 sys.hash_info 返回Python默认的哈希方法的参数 sys.implementation 当前正在运行的Python解释器的具体实现,比如CPython sys.thread_info 当前线程信息
sys.argv:脚本执行参数列表,第一个元素是脚本名称。
# test.py import sys for index, arg in enumerate(sys.argv): print("第%d个参数是: %s" % (index, arg)) 第0个参数是: test.py
sys.getrefcount(object):当达到0时自动回收。
sys.modules:全局字典。
sys.builtin_module_names:字符串元组,包含所有已经编译在python解释器内的模块名称。
import sys def find_module(module): if module in sys.builtin_module_names: print(module,"is in :","__builtin__") else: print(module,"is in :",__import__(module).__file__) find_module('os') find_module('sys') find_module('time') find_module('zlib') find_module('string')
sys.path:目录列表,供python从中查找模块。根据內建规则和PYTHONPATH变量初始化。第一个元素空字符串,表示当前目录。
sys.platform:平台名称
sys.stdin,sys.stdout,sys.stderr:交互式输入(包括input()),打印(包括print()和input()的提示符),解释器自己的提示信息和错误信息。都返回文件类型对象,支持read(),write(),flush()
当我们print(obj)的时候,事实上是调用了sys.stdout.write(obj+'\n'),将内容打印到控制台(默认是显示器),然后追加一个换行符。以下两行等价:
sys.stdout.write('hello'+'\n')
print('hello')
当我们用input('Please input something!')时,事实上是先输出提示信息,然后捕获输入。 以下两组等价:
s = input('Please input something!')
print('Please input something!',) # 逗号表示不换行
s = sys.stdin.readline()[:-1] # -1 可以抛弃输入流中的'\n' 换行符,自己琢磨一下为什么。
从控制台重定向到文件:
默认情况下sys.stdout指向控制台。如果把文件对象赋值给sys.stdout,那么print ()调用的就是文件对象的write()方法。
f_handler = open('out.log', 'w') sys.stdout = f_handler print('hello') # 你无法在屏幕上看到“hello” # 因为它被写到out.log文件里了
如果你还想同时在控制台打印的话,最好先将原始的控制台对象引用保存下来,向文件中打印之后再恢复 sys.stdout
__console__ = sys.stdout # 保存控制台 # redirection start # # 去干点别的,比如写到文件里 ... # redirection end # 干完别的了,恢复原来的控制台 sys.stdout = __console__
实例:带百分比条的进度条
import sys import time def bar(num,total): rate = num / total rate_num = int(rate * 100) r = '\r[%s%s]%d%%' % ("="*num," "*(100-num),rate_num,) sys.stdout.write(r) sys.stdin.flush() if __name__ == '__main__': for i in range(0,101): time.sleep(0.1) bar(i,100)
浙公网安备 33010602011771号