前言: 在自动化测试中, 经常需要查找操作文件, 比如说查找配置文件(从而读取配置文件的信息), 查找测试报告(从而发送测试报告邮件), 经常要对大量文件和大量路径进行操作, 这就依赖于 os 模块, 所以今天整理下比较常用的几个方法. 网上这方面资料也很多, 每次整理, 只是对自己所学的知识进行梳理, 从而加深对某个模块的使用.
那我们看看他们的使用吧:
获取文件所在路径
import os
os.path.dirname(__file__) 获取当前文件的所在路径
输入:
- import os
- from reptile import *
- print(os.path.dirname(__file__))
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- F:/Python/pag
1-1.print (os.path.dirname(os.path.dirname(__file__))) 获取当前文件的所在目录的上级路径
输入:
- import os
- from reptile import *
- print(os.path.dirname(os.path.dirname(__file__)))
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- F:/Python
1-2.print (os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) 获取当前文件的所在目录的上级目录的上级路径
输入:
- import os
- from reptile import *
- print (os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- F:/
2.os.getcwd()-- 得到当前工作的目录.
输入:
print (os.getcwd())
输出:
F:\Python\pag
3.os.name()-- 判断现在正在实用的平台, Windows 返回'nt'; Linux 返回'posix'
4,os.listdir()-- 指定所有目录下所有的文件和目录名.
输入:
print (os.listdir())
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- ['CRVanguard.py', 'dict_usage.py', 'establish_review.py', 'invoketestcase.py', '__init__.py', '__pycache__']
- # 以列表的形式全部列举出来, 其中没有区分目录和文件.
5.os.remove()-- 删除指定文件
输入:
print (os.remove('E:\python-3.2.3.amd64.msi'))
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- None
6. os.rmdir()-- 删除指定目录
7. os.mkdir()-- 创建目录注意: 这样只能建立一层,
8.os.makedirs()-- 递归建立目录
9.os.path.isfile()-- 判断指定对象是否为文件. 是返回 True, 否则 False
10.os.path.isdir()-- 判断指定对象是否为目录. 是 True, 否则 False
输入:
print (os.path.isdir('lib'))
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- False
11.os.path.exists()-- 检验指定的对象是否存在. 是 True, 否则 False. 例:
输入:
print (os.path.exists('./lib'))
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- False
12.os.path.split()-- 返回路径的目录和文件名.
输入:
print (os.path.split('E:\requests-2.18.4.tar.gz.asc'))
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- ('E:', '\requests-2.18.4.tar.gz.asc')
此处只是把前后两部分分开而已. 就是找最后一个'/'. 看例子:
输入:
print (os.path.split('E:\'))
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- ('E:\\', ' ')
13.os.system()-- 执行 shell 命令. 例:
注意: 此处运行 shell 命令时, 如果要调用 python 之前的变量, 可以用如下方式:
- var=123
- os.environ['var']=str(var) // 注意此处 [] 内得是 "字符串"
- os.system('echo $var')
14. os.chdir()-- 改变目录到指定目录
输入:
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- import os, sys
- path = "/tmp"
- # 查看当前工作目录
- retval = os.getcwd()
- print "当前工作目录为 %s" % retval
- # 修改当前工作目录
- os.chdir( path )
- # 查看修改后的工作目录
- retval = os.getcwd()
- print "目录修改成功 %s" % retval
输出:
当前工作目录为 /www
目录修改成功 /tmp
15.os.path.getsize()-- 获得文件的大小, 如果为目录, 返回 0
输入:
print (os.path.getsize('F:\QCExplorer.ini'))
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- 456
16.os.path.abspath()-- 获得绝对路径.
输入:
print (os.path.abspath('.'))
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- F:\Python\pag
17.os.path.join(path, name)-- 连接目录和文件名.
输入:
print (os.path.join('F:\','lavu.exl'))
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- F:\ \lavu.exl
18.os.path.basename(path)-- 返回文件名
输入:
print (os.path.basename('F:\QCExplorer.ini'))
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- QCExplorer.ini
19.os.path.dirname(path)-- 返回文件路径
输入:
print (os.path.dirname('F:\QCExplorer.ini'))
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- F:\
20. 获得当前程序所在的实际目录
输入:
- import os
- import sys
- if __name__ == "__main__":
- print os.path.realpath(sys.argv[0])
- print os.path.split(os.path.realpath(sys.argv[0]))
- print os.path.split(os.path.realpath(sys.argv[0]))[0]
输出:
- F:\Python\python.exe F:/Python/pag/dict_usage.py
- F:\Python\pag\dict_usage.py
- ('F:\\Python\\pag', 'dict_usage.py')
- F:\Python\pag
重点: 用法
在 Python 的 os 模块中提供了 system()用来执行系统命令.
比如我们要执行 E:\\test_object\\ 目录
下的 all_test.py 文件, 可以这样来实现:
- #coding=utf-8
- import os
- os.system('E:\\test_object\\all_test.py')
或者
- import os
- os.chdir("E:\\test_object")
- os.system('Python all_test.py')
组合用法:
通过 os.listdir()可以获取目录下的所有文件
通过 os.path.getmtime(path) #返回在此 path 下最后一次修改的时间
通过 os.path.join(path, name)连接目录和文件名
输入:
- result_dir = ('F:\\')
- lists=os.listdir(result_dir)
- # 重新按时间对目录下的文件进行排列
- lists.sort(key=lambda fn: os.path.getmtime(result_dir+"\\"+fn))
- print ('最新的文件为:' + lists[-1])
- file = os.path.join(result_dir,lists[-1])
- print(file)
输出:
F:\Python\python.exe F:/Python/pag/dict_usage.py
最新的文件为: 我以月夜寄相思. txt
F:\ 我以月夜寄相思. txt
Process finished with exit code 0
这样我们既可以找到最后一个被修改的文件是啥了.
今天就先整理到这, 后面继续补充......
来源: https://www.cnblogs.com/insane-Mr-Li/p/9153394.html