无论在写自动化脚本还是做测试os模块都是一个重量级的模块。今天我要总结一下os模块,os模块下的方法是真的多。
import os print([obj for obj in dir(os) if not obj.startswith("__")]) ['F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'W_OK', 'X_OK', '_DummyDirEntry', '_Environ', '_dummy_scandir', '_execvpe', '_exists', '_exit', '_get_exports_list', '_putenv', '_unsetenv', '_wrap_close', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'close', 'closerange', 'cpu_count', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode', 'fsencode', 'fstat', 'fsync', 'ftruncate', 'get_exec_path', 'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getenv', 'getlogin', 'getpid', 'getppid', 'isatty', 'kill', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'makedirs', 'mkdir', 'name', 'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'replace', 'rmdir', 'scandir', 'sep', 'set_handle_inheritable', 'set_inheritable', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'st', 'startfile', 'stat', 'stat_float_times', 'stat_result', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'supports_fd', 'supports_follow_symlinks', 'symlink', 'sys', 'system', 'terminal_size', 'times', 'times_result', 'truncate', 'umask', 'uname_result', 'unlink', 'urandom', 'utime', 'waitpid', 'walk', 'write']
os.pardir ——获取当前上级目录=》返回 ..
note:除了前两个命令不带括号之外,以下命令基本都带括号。
os.getcwd()——全称应该是'get current work directory',获取当前文件所在的绝对路径。
os.getenv()和os.putenv()----分别用来读取和设置环境变量
os.environ(x [,x])--用来读取环境变量
区别:
os.getenv(x) does not raise an exception ,but returns None.
>>> import os >>> print(os.getenv("HOME")) /home/centos >>> print(os.getenv("PATH")) /home/centos/anaconda3/bin:/home/centos/anaconda3/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/soft/jdk/bin:/soft/hadoop/bin:/soft/hadoop/sbin:/soft/zk/bin:/soft/hive/bin:/soft/hbase/bin:/soft/phoenix/bin:/soft/sqoop/bin:/soft/hue-4.1.0/build/env//bin:/soft/flume/bin:/soft/kafka/bin:/home/centos/.local/bin:/home/centos/bin
os.listdir(path)——列出path目录下所有的文件和目录名。Path参数可以省略。例 以列表的形式全部列举出来,其中没有区分目录和文件。
os.remove(path)——删除path指定的文件,该参数不能省略。
os.rmdir(path)——删除path指定的目录,该参数不能省略。
os.mkdir(path)——创建path指定的目录,该参数不能省略。 注意:这样只能建立一层
os.makedirs(path)——递归建立可以创建多层目录
os.chdir(path)——'change dir'改变目录到指定目录=》相当于linux的cd命令
os.path.isfile(path)——判断指定对象是否为文件。是返回True,否则False
os.path.isdir(path)——判断指定对象是否为目录。是True,否则False。
os.path.exists(path)——检验指定的对象是否存在。是True,否则False.
os.path.split(path)——返回路径的目录和文件名,即将目录和文件名分开,放到一个元祖里。此处只是把前后两部分分开而已。就是找最后一个'/'。
os.path.join(path, name)——连接目录和文件名,与os.path.split(path)相对。
os.path.abspath()——获得绝对路径。
os.path.basename(path)——返回文件名
os.path.dirname(path)——返回文件路径
os.path.getsize()——获得文件的大小,如果为目录,返回0
os.system(cmd)——执行shell命令。返回值是脚本的退出状态码,0代表成功,1代表不成功
Demo 递归查找文件
import os def findFile(dir,target): list1=[] filenames=os.listdir(dir) for filename in filenames: abpath=os.path.join(dir,filename) if os.path.isfile(abpath): if filename.endswith(target): list1.append(abpath) else: findFile(abpath,target) return list1 print(findFile("D:/Program Files/feiq/Recv Files",".sql"))