python os用法詳解


前言:在自動化測試中,經常需要查找操作文件,比如說查找配置文件(從而讀取配置文件的信息),查找測試報告(從而發送測試報告郵件),經常要對大量文件和大量路徑進行操作,這就依賴於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[-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)

部分轉自:python之os模塊

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM