Python模塊之os-shutil對磁盤文件的清理、分類實例

在Abaqus運行或者提交計算之後,工作目錄會產生大量的數據文件,對於我們abaqus來說只需要保留一部分文件即可,比如:inp(abaqus的輸入操作文件);odb(數據庫輸出文件);cae(工程文件)和msg(任務求解信息記錄);rpy(操作命令記錄文件)等等
由此我們可以利用python腳本進行工作目錄文件的清理和分類。

下面是我們文件和目錄操作的python模塊及其主要函數:


****下面是OS模塊:**
------------**

# os 模塊

os.sep 可以取代操作系統特定的路徑分隔符。windows下爲 '\\'
os.name 字符串指示你正在使用的平臺。比如對於Windows,它是'nt',而對於Linux/Unix用戶,它是 'posix'
os.getcwd() 函數得到當前工作目錄,即當前Python腳本工作的目錄路徑
os.getenv() 獲取一個環境變量,如果沒有返回none
os.putenv(key, value) 設置一個環境變量值
os.listdir(path) 返回指定目錄下的所有文件和目錄名
os.remove(path) 函數用來刪除一個文件
os.system(command) 函數用來運行shell命令
os.linesep 字符串給出當前平臺使用的行終止符。例如,Windows使用 '\r\n',Linux使用 '\n' 而Mac使用 '\r'
os.path.split(path)  函數返回一個路徑的目錄名和文件名
os.path.isfile() 和os.path.isdir()函數分別檢驗給出的路徑是一個文件還是目錄
os.path.exists() 函數用來檢驗給出的路徑是否真地存在
os.curdir  返回當前目錄 ('.')
os.mkdir(path) 創建一個目錄
os.makedirs(path) 遞歸的創建目錄
os.chdir(dirname) 改變工作目錄到dirname    
os.path.getsize(name) 獲得文件大小,如果name是目錄返回0L
os.path.abspath(name) 獲得絕對路徑
os.path.normpath(path) 規範path字符串形式
os.path.splitext()  分離文件名與擴展名
os.path.join(path,name) 連接目錄與文件名或目錄
os.path.basename(path) 返回文件名
os.path.dirname(path) 返回文件路徑
os.walk(top,topdown=True,οnerrοr=None)  遍歷迭代目錄
os.rename(src, dst)  重命名file或者directory src到dst 如果dst是一個存在的directory, 將拋出OSError. 在Unix, 如果dst在存且是一個file, 如果用戶有權限的話,它將被安靜的替換. 操作將會失敗在某些Unix 中如果src和dst在不同的文件系統中. 如果成功, 這命名操作將會是一個原子操作 (這是POSIX 需要). 在 Windows上, 如果dst已經存在, 將拋出OSError,即使它是一個文件. 在unix,Windows中有效。
os.renames(old, new) 遞歸重命名文件夾或者文件。像rename()

下面是shutil模塊函數:

shutil.copyfile( src, dst) 從源src複製到dst中去。當然前提是目標地址是具備可寫權限。拋出的異常信息爲IOException. 如果當前的dst已存在的話就會被覆蓋掉
shutil.move( src, dst)  移動文件或重命名
shutil.copymode( src, dst) 只是會複製其權限其他的東西是不會被複制的
shutil.copystat( src, dst) 複製權限、最後訪問時間、最後修改時間
shutil.copy( src, dst)  複製一個文件到一個文件或一個目錄
shutil.copy2( src, dst)  在copy上的基礎上再複製文件最後訪問時間與修改時間也複製過來了,類似於cp –p的東西
shutil.copy2( src, dst)  如果兩個位置的文件系統是一樣的話相當於是rename操作,只是改名;如果是不在相同的文件系統的話就是做move操作
shutil.copytree( olddir, newdir, True/Flase)
把olddir拷貝一份newdir,如果第3個參數是True,則複製目錄時將保持文件夾下的符號連接,如果第3個參數是False,則將在複製的目錄下生成物理副本來替代符號連接
shutil.rmtree( src ) 遞歸刪除一個目錄以及目錄內的所有內容
'''

**

實例:對abaqus工作目錄進行清理分類:

**

 import os
 import os.path
 import shutil

targetdir = 'C:\\Users\\Administrator\\Documents\\matlab  abaqus  python'

currdir = os.getcwd();
print('當前的工作目錄是在:'+currdir)

#顯示切換後的工作目錄
os.chdir(targetdir)
curdir2 = os.getcwd()
print('切換後的工作目錄:'+curdir2)

newDir = os.path.join(curdir2,'text')
try:
    os.mkdir(newDir)
except:
    print('創建文件失敗!文件已經存在')
info = os.listdir(curdir2)
f = open('record.txt','w')
for item in info:
    tempdir = os.path.join(curdir2,item)
    extstr = os.path.splitext(item)[1]#該函數返回文件 名和文件後綴拓展名,[1]就是拓展名
    if os.path.isfile(tempdir):
        if extstr=='.inp' or extstr=='.cae' or extstr=='.odb' or extstr=='.fil':
            shutil.move(tempdir,newDir)
            tempstr = '文件 '+item+'已經被移動!!\n'
        else:
            try:
                os.remove(tempdir)
                tempstr = '文件 '+item+' 已經被刪除'
            except:
                tempstr = 'record.txt '+'保留文件\n'
    f.writelines(tempstr)
f.close()

執行結果:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章