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

那我们看看他们的使用吧:

  • 获取文件所在路径
  • import os
  • ♦1.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

  21.查看文件时间

    ♦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

  22.os.sep 可以取代操作系统特定的路径分割符。

   23.os.linesep字符串给出当前平台使用的行终止符

>>> os.linesep
'\r\n' #Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'。
>>> os.sep
'\\' #Windows
>>>

  24.os.path.splitext():分离文件名与扩展名

>>> os.path.splitext('a.txt')
('a', '.txt')

  25.os.path.normpath(path):规范path字符串形式

重点:用法

  ♦在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

这样我们既可以找到最后一个被修改的文件是啥了。

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

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

代码如下:

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[-])
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)

部分转自:python之os模块

python os用法详解的更多相关文章

  1. python format 用法详解

    format 用法详解 不需要理会数据类型的问题,在%方法中%s只能替代字符串类型 单个参数可以多次输出,参数顺序可以不相同 填充方式十分灵活,对齐方式十分强大 官方推荐用的方式,%方式将会在后面的版 ...

  2. python os模块详解

    一.Python os模块(Linux环境) 1.1 执行shell命令 os.system('cmd') 执行命令不保存结果 os.popen('command') 执行后返回结果,使用.read( ...

  3. python os.walk详解

    os模块大全详情 os.walkos.walk方法,主要用来遍历一个目录内各个子目录和子文件. os.walk(top, topdown=True, onerror=None, followlinks ...

  4. python os 模块详解

    os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. os.getcwd:得 ...

  5. python yaml用法详解

    YAML是一种直观的能够被电脑识别的的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互.YAML类似于XML,但是语法比XML简单得多,对于转化成数组或可以hash的数据时是很简单有效的. Py ...

  6. Python self用法详解

    在定义类的过程中,无论是显式创建类的构造方法,还是向类中添加实例方法,都要求将 self 参数作为方法的第一个参数.例如,定义一个 Person 类: class Person: def __init ...

  7. 关于python format()用法详解

    str.format() 这个特性从python2.6而来 其实实现的效果和%有些类似 不过有些地方更方便 通过位置映射: In [1]: '{0},{1}'.format('kzc',18) Out ...

  8. python format用法详解

    #常用方法:print('{0},{1}'.format('zhangk', 32)) print('{},{},{}'.format('zhangk','boy',32)) print('{name ...

  9. Python——print用法详解

    1.print语法格式 print()函数具有丰富的功能,详细语法格式如下:print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=Fa ...

随机推荐

  1. params must be [a-zA-Z0-9] for verification sms

    阿里短信发送短信时返回这个信息,之前是可以发送的,现在阿里应该是做了限制的.如果你的短信模板类型为“验证码”,发送的短信内容只能是包含字母和数字 所以当你的短信内容包含特殊符号和中文时,请把短信模板类 ...

  2. 搭建github博客,hexo主题

    买个域名,多少钱的都有,看自己喜欢,可以去万网,ali嘛. 一般在windows,下载gitbash(配置公钥,全局用户名和email),node.js(不用配置). 新建github项目,添加公钥( ...

  3. php function 按引用返回一个值

    按引用返回一个值,而不是按值返回,这样就无需为变量建立一个重复的副本 function &array_find_value($needle, &$haystack) { foreach ...

  4. ubuntu账户密码正确但是登录不进去系统

    ubuntu12.04管理员账户登录不了桌面,只能客人会话登录 求助!!ubuntu12.04管理员账户登录不了桌面,只能客人会话登录. ctrl+alt+f1 ,切换到tty1,输入管理员帐号和密码 ...

  5. 一篇很好的关于mysqld_safe脚本源码解读的文章,收藏了!!

    #!/bin/sh # 一些状态变量的定义 KILL_MYSQLD=; # 试图kill多余的mysqld_safe程序,1表示需要kill MYSQLD= # mysqld二进制可执行文件的名称 n ...

  6. 回答了这四个问题,你就可以打造最佳App首页

    如果把手机APP比作人的话,首页就是脸面了.首页是一款产品的大门,好的开头就是成功的一半. 调查表示,26%的手机APP的平均使用次数只有一次.对首次使用产品的用户而言,首页的好坏关乎到用户对该产品的 ...

  7. qt学习(一) qt安装

    QT5现在安装已经方便了许多 相比QT4 可以一路点击到底 无需额外的太多的操作. http://download.qt.io/official_releases/ 下载 1 windows下可以选择 ...

  8. JMS规范简介

    一.JMS规范 Java消息服务定义: Java消息服务(Java Message Service)即JMS,是一个Java平台中面向消息中间件的API,用于在两个应用程序之间或分布式系统中发送/接受 ...

  9. HDU 5117 Fluorescent (数学+状压DP)

    题意:有 n 个灯,初始状态都是关闭,有m个开关,每个开关都控制若干个.问在m个开关按下与否的2^m的情况中,求每种情况下亮灯数量的立方和. 析:首先,如果直接做的话,时间复杂度无法接受,所以要对其进 ...

  10. Web数据挖掘综述