(二十九)python3 之os模块

 

 在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路径进行操作,这就依赖于os模块,所以今天整理下比较常用的几个方法。网上这方面资料也很多,每次整理,只是对自己所学的知识进行梳理,从而加深对某个模块的使用。

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: ('.')
os.pardir  获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多层递归目录
os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat('path/filename')  获取文件/目录信息
os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  运行shell命令,直接显示
os.environ  获取系统环境变量
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.split(path)的第二个元素
os.path.exists(path)  如果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所指向的文件或者目录的最后修改时间

1.当前路径及路径下的文件

os.getcwd():查看当前所在路径。

os.listdir(path):列举目录下的所有文件。返回的是列表类型。

>>> import os
>>> os.getcwd()
'D:\\pythontest\\ostest'
>>> os.listdir(os.getcwd())
['hello.py', 'test.txt']

2.绝对路径

os.path.abspath(path):返回path的绝对路径。

>>> os.path.abspath('.')
'D:\\pythontest\\ostest'
>>> os.path.abspath('..')
'D:\\pythontest'

3.查看路径的文件夹部分和文件名部分

os.path.split(path):将路径分解为(文件夹,文件名),返回的是元组类型。可以看出,若路径字符串最后一个字符是\,则只有文件夹部分有值;若路径字符串中均无\,则只有文件名部分有值。若路径字符串有\,且不在最后,则文件夹和文件名均有值。且返回的文件夹的结果不包含\.

os.path.join(path1,path2,...):将path进行组合,若其中有绝对路径,则之前的path将被删除。

>>> os.path.split('D:\\pythontest\\ostest\\Hello.py')
('D:\\pythontest\\ostest', 'Hello.py')
>>> os.path.split('.')
('', '.')
>>> os.path.split('D:\\pythontest\\ostest\\')
('D:\\pythontest\\ostest', '')
>>> os.path.split('D:\\pythontest\\ostest')
('D:\\pythontest', 'ostest')
>>> os.path.join('D:\\pythontest', 'ostest')
'D:\\pythontest\\ostest'
>>> os.path.join('D:\\pythontest\\ostest', 'hello.py')
'D:\\pythontest\\ostest\\hello.py'
>>> os.path.join('D:\\pythontest\\b', 'D:\\pythontest\\a')
'D:\\pythontest\\a'

 os.path.dirname(path):返回path中的文件夹部分,结果不包含'\'

>>> os.path.dirname('D:\\pythontest\\ostest\\hello.py')
'D:\\pythontest\\ostest'
>>> os.path.dirname('.')
''
>>> os.path.dirname('D:\\pythontest\\ostest\\')
'D:\\pythontest\\ostest'
>>> os.path.dirname('D:\\pythontest\\ostest')
'D:\\pythontest'

 os.path.basename(path):返回path中的文件名。

>>> os.path.basename('D:\\pythontest\\ostest\\hello.py')
'hello.py'
>>> os.path.basename('.')
'.'
>>> os.path.basename('D:\\pythontest\\ostest\\')
''
>>> os.path.basename('D:\\pythontest\\ostest')
'ostest'

4.查看文件时间

 os.path.getmtime(path):文件或文件夹的最后修改时间,从新纪元到访问时的秒数。

 os.path.getatime(path):文件或文件夹的最后访问时间,从新纪元到访问时的秒数。

 os.path.getctime(path):文件或文件夹的创建时间,从新纪元到访问时的秒数。

>>> os.path.getmtime('D:\\pythontest\\ostest\\hello.py')
1481695651.857048
>>> os.path.getatime('D:\\pythontest\\ostest\\hello.py')
1481687717.8506615
>>> os.path.getctime('D:\\pythontest\\ostest\\hello.py')
1481687717.8506615

5.查看文件大小

  os.path.getsize(path):文件或文件夹的大小,若是文件夹返回0。

>>> os.path.getsize('D:\\pythontest\\ostest\\hello.py')
58L
>>> os.path.getsize('D:\\pythontest\\ostest')
0L

6.查看文件是否存在

 os.path.exists(path):文件或文件夹是否存在,返回True 或 False。

>>> os.listdir(os.getcwd())
['hello.py', 'test.txt']
>>> os.path.exists('D:\\pythontest\\ostest\\hello.py')
True
>>> os.path.exists('D:\\pythontest\\ostest\\Hello.py')
True
>>> os.path.exists('D:\\pythontest\\ostest\\Hello1.py')
False

7.一些表现形式参数

os中定义了一组文件、路径在不同操作系统中的表现形式参数,如:

>>> os.sep
'\\'
>>> os.extsep
'.'
>>> os.pathsep
';'
>>> os.linesep
'\r\n'

8.实例说明

在自动化测试过程中,常常需要发送邮件,将最新的测试报告文档发送给相关人员查看,这是就需要查找最新文件的功能。

举例:查找文件夹下最新的文件。

 

 

 

import os
def new_file(test_dir):
    #列举test_dir目录下的所有文件(名),结果以列表形式返回。
    lists=os.listdir(test_dir)
    #sort按key的关键字进行升序排序,lambda的入参fn为lists列表的元素,获取文件的最后修改时间,所以最终以文件时间从小到大排序
    #最后对lists元素,按文件修改时间大小从小到大排序。
    lists.sort(key=lambda fn:os.path.getmtime(test_dir+'\\'+fn))
    #获取最新文件的绝对路径,列表中最后一个值,文件夹+文件名
    file_path=os.path.join(test_dir,lists[-1])
    return file_path

#返回D:\pythontest\ostest下面最新的文件
print new_file('D:\\system files\\workspace\\selenium\\email126pro\\email126\\report')

运行结果

 

 最后再啰嗦一句,关于lambda的用法(python中单行的最小函数):

 

key=lambda fn:os.path.getmtime(test_dir+'\\'+fn)
#相当于
def key(fn):
    return os.path.getmtime(test_dir+'\\'+fn)

 

编号方法描述/说明
1 os.access(path, mode) 使用真正的uid/gid来测试访问指定的路径。
2 os.chdir(path) 将当前工作目录更改为指定路径。
3 os.chflags(path, flags) 将指定的路径的标志设置为数字标志。
4 os.chmod(path, mode) 将路径模式更改为数字模式。
5 os.chown(path, uid, gid) 将指定的路径的所有者和组ID更改为数字uid和gid。
6 os.chroot(path) 将当前进程的根目录更改为指定的路径。
7 os.close(fd) 关闭文件描述符fd
8 os.closerange(fd_low, fd_high) 将所有从fd_low(包括)到fd_high(不包括)的文件描述符关闭,并忽略错误。
9 os.dup(fd) 返回文件描述符fd的副本。
10 os.dup2(fd, fd2) 重复从fdfd2的文件描述符,如果需要,首先关闭fd2
11 os.fchdir(fd) 将当前工作目录更改为由文件描述符fd表示的目录。
12 os.fchmod(fd, mode) fd给出的文件的模式mode更改为数字模式。
13 os.fchown(fd, uid, gid) 将由fd提供的文件的所有者和组ID更改为数字uidgid
14 os.fdatasync(fd) 强制将文件描述符fd写入磁盘。
15 os.fdopen(fd[, mode[, bufsize]]) 返回连接到文件描述符fd的打开的文件对象。
16 os.fpathconf(fd, name) 返回与打开文件相关的系统配置信息。 name指定要检索的配置值。
17 os.fstat(fd) 返回文件描述符fd的状态,如stat()
18 os.fstatvfs(fd) 返回有关包含与文件描述符fd相关联的文件的文件系统的信息,如statvfs()
19 os.fsync(fd) 强制将文件写入与文件描述符fd相关联的磁盘。
20 os.ftruncate(fd, length) 截断与文件描述符fd相对应的文件,使其大小最大为字节。
21 os.getcwd() 返回一个表示当前工作目录的字符串。
22 os.getcwdu() 返回表示当前工作目录的Unicode对象。
23 os.isatty(fd) 如果文件描述符fd打开并连接到tty(-like)设备,则返回True,否则返回False
24 os.lchflags(path, flags) 将路径(path)的标志设置为数字标志,如chflags(),但不要跟随符号链接。
25 os.lchmod(path, mode) 将路径模式更改为数字模式。
26 os.lchown(path, uid, gid) 将路径的所有者和组ID更改为数字uid和gid。此功能不会遵循符号链接。
27 os.link(src, dst) 创建一个指向src名为dst的硬链接。
28 os.listdir(path) 返回一个列表,其中包含由path指定的目录中的条目的名称。
29 os.lseek(fd, pos, how) 将文件描述符fd的当前位置设置为位置pos,由how指定如何修改。
30 os.lstat(path) 类似于stat(),但不遵循符号链接。
31 os.major(device) 从原始设备号中提取设备主体号码。
32 os.makedev(major, minor) 从主要和次要设备编号构成原始设备编号。
33 os.makedirs(path[, mode]) 递归目录创建函数。
34 os.minor(device) 从原始设备号中提取设备次要号码。
35 os.mkdir(path[, mode]) 以数字模式mode创建名为path的目录。
36 os.mkfifo(path[, mode]) 以数字模式模式创建名为path的FIFO(命名管道)。 默认模式为0666(八进制)。
37 os.mknod(filename[, mode = 0600, device]) 创建名为filename的文件系统节点(文件,设备专用文件或命名管道)。
38 os.open(file, flags[, mode]) 打开文件文件,并根据标志和可能的模式根据模式设置各种标志。
39 os.openpty() 打开一个新的伪终端对。分别为pty和tty返回一对文件描述符(主,从)。
40 os.pathconf(path, name) 返回与命名文件相关的系统配置信息。
41 os.pipe() 创建一个管道。分别返回一对可用于阅读和写入的文件描述符(r,w)。
42 os.popen(command[, mode[, bufsize]]) 打开或从命令打开管道。
43 os.read(fd, n) 从文件描述符fd读取最多n个字节。 返回一个包含读取字节的字符串。 如果fd引用的文件的末尾已经到达,则返回一个空字符串。
44 os.readlink(path) 返回一个表示符号链接所指向的路径的字符串。
45 os.remove(path) 删除文件路径。
46 os.removedirs(path) 递归删除目录。
47 os.rename(src, dst) 将文件或目录src重命名为dst
48 os.renames(old, new) 递归目录或文件重命名功能。
49 os.rmdir(path) 删除目录路径
50 os.stat(path) 在给定的路径上执行stat系统调用。
51 os.stat_float_times([newvalue]) 确定stat_result是否将时间戳表示为浮点对象。
52 os.statvfs(path) 在给定路径上执行statvfs系统调用。
53 os.symlink(src, dst) 创建一个指向src的符号链接,命名为dst
54 os.tcgetpgrp(fd) 返回与fd(由open()返回的打开的文件描述符)给出的终端关联的进程组。
55 os.tcsetpgrp(fd, pg) 将与fd(open()返回的打开的文件描述符)给定的终端相关联的进程组pg
56 os.tempnam([dir[, prefix]]) 返回创建临时文件的唯一路径名。
57 os.tmpfile() 返回以更新模式打开的新文件对象(w+b)。
58 os.tmpnam() 返回创建临时文件的唯一路径名。
59 os.ttyname(fd) 返回指定与文件描述符fd相关联的终端设备的字符串。 如果fd与终端设备没有关联,则会出现异常。
60 os.unlink(path) 删除文件路径。
61 os.utime(path, times) 设置由path指定的文件的访问和修改时间。
62 os.walk(top[, topdown = True[, onerror = None[, followlinks = False]]]) 通过自上而下或自下而上地遍历树来生成目录树中的文件名。
63 os.write(fd, str) 将字符串str写入文件描述符fd。 返回实际写入的字节数。

 

 

 

posted @ 2019-12-05 14:15  小码蚁儿  阅读(217)  评论(0编辑  收藏  举报