Python在自動化運維時最常用的50個方法
下面我們梳理了下一些Python在自動化運維時經常會用到的方法:
得到當前工作目錄,即當前Python腳本工作的目錄路徑:os.getcwd()
返回指定目錄下的所有文件和目錄名:os.listdir()
函數用來刪除一個文件:os.remove()
刪除多個目錄:osremovedirs(r"c:python") //略危險,熟練之後再用吧
檢驗給出的路徑是否是一個文件:os.path.isfile() //經常會用
檢驗給出的路徑是否是一個目錄:os.path.isdir() //經常會用
判斷是否是絕對路徑:os.path.isabs()
檢驗給出的路徑是否真實存在:os.path.exists()
返回一個路徑的目錄名和文件名:os.path.split()
例:import os
os.path.split(/home/swaroop/byte/code/poem.txt)
結果為:(/home/swaroop/byte/code,poem.txt) //就是把路徑和文件
名分別列出來顯得更加清楚
分離擴展名:os.path.splitext()
獲取路徑名:os.path.dirname()
獲取文件名:os.path.basename()
運行shell命令:os.system()
讀取和設置環境變數:os.getenv()與os.putenv()
給出當前平台使用的行終止符:os.linesep windows使用rn,linux使
用n而mountainlion使用的是r
顯示你正在使用的平台:os.name 對於windows,他是nt,而對於linux/unix
,他是posix
重命名:os.rename(old,new)
創建多集目錄:os.makedirs(r"c:pythontest")
創建單個目錄:os.mkdir("test")
獲取文件屬性 os.stat(file)
修改文件許可權和時間戳:os.chmod(file)
終止當前進程:os.exit() //python2.4可用
獲取文件大小:os.path.getsize(filename)
文件操作:
os.mknod("test.txt") 創建空文件
fp = open("test.txt",w) 直接打開一個文件,如果文件不存在則創建文件
關於open/file的模式:
w 以寫的方式打開
a 以追加的模式打開(從EOF開始,必要時創建新文件)
r+ 以讀寫模式打開
w+ 以讀寫模式打開 //據說不好用
a+ 以讀寫模式打開 //我比較喜歡用,讀寫打開後追加
rb 以二進位讀模式打開
wb 以二進位寫模式打開
ab 以二進位追加模式打開
rb+ 以二進位讀寫模式打開
wb+ 以二進位讀寫模式打開
ab+ 以二進位讀寫模式打開
fp.read([size]) //size 為讀取長度,以byte為單位
fp.readline([size]) //讀一行,如果定義了size,有可能返回的只是一行的一
部分
fp.write(str) //把str寫到文件中,write()並不會在str後加上一個換行符
fp.writelines(seq) //把seq的內容全部寫到文件中(多行一次性寫入)。這個
函數也只是忠實地寫入,不會在每行後面加任何東西
fp.close()
fp.flush() //把緩衝區的內容寫入硬碟
fp.fileno() //返回一個長整形的「文件標籤」
fp.isatty() //文件是否是一個終端設備文件(unix系統中的)
fp.tell() //返回當前位置,比如:
fp = open("zhige.txt",a+) //zhige.txt里的內容為zhigedahaoren
fp.read(3)
c = fp.tell()
print c //會返回顯示zhigedahaoren里的第三個字母i
fp.next() //返回下一行,並將文件操作標記位移動到下一行
把一個file用於for...in file 這樣的語句時,就是調用next()函數來實現遍歷
的
fp.seek(offset[,whence]) //講文件的游標移動到offset的位置和tell搭配
做實驗看比較明顯
fp.truncate([size]) //把文件裁成規定的大小,默認的是裁到當前文件操
作坐標的位置。如果size比文件大小還要大,依據系統的不同,可能是不改變文
件,也可能是用0把文件補到相應的大小,也可能是以一些隨機的內容加上去。
目錄操作: //感覺可以用 os.system()里寫shell完成
os.mkdir("file") 創建目錄
複製文件:
shutil.copyfile("oldfile","newfile") //oldfile和newfile都智能是文件
shutil.copy("oldfile","newfile") //oldfile只能是文件,newfile可
以是文件,也可以是目標目錄
複製文件夾:
shutil.copytree("olddir","newdir") //olddir和newdir都只能是目錄,
且newdir必須不存在
重命名文件(目錄):
os.rename("oldname","newname") //文件或目錄都是這條命令
移動文件(目錄)
shutil.move("oldpos","newpos")
刪除文件
os.remove("file")
刪除目錄:
os.rmdir("dir") //只能刪除空目錄
shutil.rmtree("dir") //空目錄,有內容的目錄都可以刪
轉換目錄:
os.chdir("path") //更換路徑
一些詳解:
seek(offset,where): where=0從起始位置移動,1從當前位置移動,2
從結束位置移動。當有換行時,會被換行截斷。seek()無返回值,故值為None。
tell(): 文件的當前位置,即tell是獲得文件指針的位置,受
seek,readline,read,readlines影響,不受truncate影響
truncate(n):從文件的首行字元開始截斷,截斷文件為n個字元;無n
表示從當前位置起截斷;階段之後n後面的說有字數被刪除。其中win下的換行代
表2個字元大小。
readline(n):讀入若干行,n表示讀入的最長位元組數。其中讀取的開始
位置為tell()+1。當n為空時,默認只讀當前行的內容
readlines 讀入所有行內容
read 讀入所有行內容
二、以下以一個例子說明以上各函數的作用
fso = open("f:a.txt",w+) //以w+方式,並非a方式打開文件,故文件
原內容被清空
print fso.tell() //文件原內容被清空,故此時tell()=0
fso.write("abcden") //寫入文件abcden,因為換行n佔2個字元,故寫入了7
個字元
print fso.tell() 此時tell()=7
fso.write("fghwm") //又寫入文件fghwm,故此時文件共寫入7+5=12個字元
print fso.tell() //此時tell()=12
fso.seek(1,0) //從其實位置即文件首行首字元開始移動一個字元
print fso.tell() //此時tell()=1
print fso.readline() //讀取當前行,即文件的第一行,但是會從第二個字元
開始讀,結果為bcde
//若換成for讀取整個文件或者read讀取整個文件則結果為bcdefghwm
print fso.tell() //因為readline此時tell()=7
fso.truncate(8) //從寫入後文件的首行字元開始算,截斷為8個字元,即
abcednf,即文件內容為:abcdenf
print fso.tell() //tell()依舊為7,並為受truncate(8)的影響,但此時文件
的內容為abcdenf
print fso.readline() //從tell()+1=8 開始讀取,讀取當前行內容:f
推薦閱讀:
※自學python遇到如下問題如何解決?(主要有關模塊安裝的問題)
※python 中如何實現一行輸入多個值 ?
※python入門教程,求知友推薦?
※如何使用爬蟲監控一系列網站的更新情況?
※Python中 pickle有什麼意義,pickle了再恢復?