歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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.remove("file") 刪除目錄: os.rmdir("dir")  //只能刪除空目錄 shutil.rmtree("dir") //空目錄,有內容的目錄都可以刪 轉換目錄: os.chdir("path")   //更換路徑 返回一個路徑的目錄名和文件名: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.splitext('/soft/dir1/test1.txt')
('/soft/dir1/test1', '.txt')

獲取路徑名:os.path.dirname()
>>> os.path.dirname('/soft/dir1/test1.txt')
'/soft/dir1'

獲取文件名:os.path.basename()
>>> os.path.basename('/soft/dir1/test1.txt')
'test1.txt'


運行shell命令:os.system() 讀取和設置環境變量:os.getenv()與os.putenv() 給出當前平台使用的行終止符:os.linesep   windows使用'\r\n',linux使   用'\n'而mountainlion使用的是'\r' 顯示你正在使用的平台:os.name 對於windows,他是'nt',而對於linux/unix   ,他是'posix' 重命名:os.rename(old,new) 創建多集目錄:os.makedirs(r"c:\python\test") 創建單個目錄:os.mkdir("test") 獲取文件屬性 os.stat(file) 修改文件權限和時間戳:os.chmod(file) 終止當前進程:os.exit()  //python2.4可用 獲取文件大小:os.path.getsize(filename)

  1. #!/usr/bin/python
    import os
    tardir='/soft/dir2'
    soudir='/soft/dir1'


    allfile=os.listdir(soudir)
    for fn in allfile:
         fullpath=soudir+os.sep+fn
         command="cp %s %s" %(fullpath,tardir)
         if os.system(command) == 0: 
            print 'cp is ok'


  1. 例子:

    [root@localhost class2]# more v3.py

    #!/usr/bin/python

     

    import os    ---導入系統函數

    import time  ---導入時間函數

     

    source = ['/home/swaroop/byte', '/home/swaroop/bin']  ---待備份的路徑或者文件

     

    target_dir = '/mnt/e/backup/'    ---備份目的地

     

    today = target_dir + time.strftime('%Y%m%d')    ---時間函數取出今天的日期

     

    now = time.strftime('%H%M%S')              ---時間函數取出現在的日期

     

    comment = raw_input('Enter a comment -->')    ---給備份輸出一個注釋

    if len(comment) == 0:

        target = today + os.sep + now + '.zip'    ---- os.sep會根據你的操作系統給出目錄分隔符

    else:

        target = today + os.sep + now + '_' + comment.replace(' ', '_') + '.zip'

     

    if not os.path.exists(today):                ----判斷目錄是否存在

        os.mkdir(today) # make directory        ----調用linux命令

        print 'Successfully created directory', today

     

    zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))    ---joi指定空分割符,備份

     

    if os.system(zip_command) == 0:        os.system函數 運行 命令,利用這個函數就好像在 系統 中運行命令一樣。即在shell中運行命令——如果命令成功運行,它返回0,否則它返回錯誤號。

        print 'Successful backup to', target

    else:

        print 'Backup FAILED'


  文件操作: 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")     一些詳解:   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("abcde\n") //寫入文件abcde\n,因為換行\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個字符,即   abced\nf,即文件內容為:abcde\nf   print fso.tell()  //tell()依舊為7,並為受truncate(8)的影響,但此時文件   的內容為abcde\nf   print fso.readline()  //從tell()+1=8 開始讀取,讀取當前行內容:f

下面關於Python的文章您也可能喜歡,不妨看看:

Linux下Python的安裝以及注意事項  http://www.linuxidc.com/Linux/2015-11/124861.htm

Ubuntu 14.04 下安裝使用Python rq模塊  http://www.linuxidc.com/Linux/2015-08/122441.htm

無需操作系統直接運行 Python 代碼  http://www.linuxidc.com/Linux/2015-05/117357.htm

CentOS上源碼安裝Python3.4  http://www.linuxidc.com/Linux/2015-01/111870.htm

《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Python 語言的發展簡史 http://www.linuxidc.com/Linux/2014-09/107206.htm

Python 的詳細介紹:請點這裡
Python 的下載地址:請點這裡 

Copyright © Linux教程網 All Rights Reserved