乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Python模塊整理(一):文件系統(tǒng)相關(guān)模塊os

       panhoy 2015-03-16
      os 系統(tǒng)服務(wù)應(yīng)用程序接口(API),系統(tǒng)管理員最應(yīng)關(guān)注的模塊之一。
      一、os模塊
      (一)文件目錄,權(quán)限相關(guān)
      1、創(chuàng)建目錄
      mkdir(path [, mode=0777])
      os.mkdir('/tmp/os_dir',0754)
      2、刪除目錄
      os.rmdir("/tmp/os_dir")
      3、列出目錄內(nèi)容
      os.listdir('/root')
      結(jié)果為一個列表
      4、更改文件目錄
      os.chdir('/tmp')
      os.chroot('/tmp') #設(shè)置監(jiān)牢目錄
      5、顯示當(dāng)前目錄
      os.getcwd()      
      '/tmp'
      6、創(chuàng)建多層目錄 類似系統(tǒng)makedir -p
      os.makedirs('test/test1/test2')
      7、刪除多層目錄【每層都是空的除了要刪除目錄外】
      os.removedirs('/tmp/test/test1/test2')
      8、創(chuàng)建一個文件
      >>> f=open("/tmp/testfile", "w")
      >>> f.write('test\n')
      >>> f.close()
      創(chuàng)建空文件呢?
      >>> f=open("/tmp/testfile", "w")
      >>> f.close()
      9、刪除文件
      os.remove("/tmp/testfile")
      10、查看文件狀態(tài)
      os.stat('/tmp/os_dir')
      posix.stat_result(st_mode=16876, st_ino=17024L, st_dev=94L, st_nlink=2, st_uid=0, st_gid=0, st_size=512L, st_atime=1331646103, st_mtime=1331646103, st_ctime=1331646103)
      依次是st_mode (權(quán)限模式), st_ino (inode number), st_dev (device), st_nlink (number of hard links), st_uid (所有者用戶 ID), st_gid (所有者所在組 ID ), st_size (文件大小, 字節(jié)), st_atime (最近一次訪問時間), st_mtime (最近修改時間), st_ctime (平臺相關(guān); Unix下的最近一次元數(shù)據(jù)/metadata修改時間, 或者 Windows 下的創(chuàng)建時間) - 以上項目也可作為屬性訪問
      11、文件改名
      文件夾改名
      os.rename('/tmp/os_dir','/tmp/os_rename')
      文件改名
      os.rename('/tmp/testfile','/tmp/TSFILE')
      12、文件權(quán)限修改
      chmod(path, mode)
      os.chmod('/tmp/os_rename',0777)
      os.chmod('/tmp/TSFILE',0666)
      os.lchmod(path, mode) 修改連接文件權(quán)限
      13、文件屬主修改
      chown(path, uid, gid)
      os.chown('/tmp/TSFILE',1003,1003)
      os.chown('os_rename',0,1003)
      14、umask
      os.umask(022)
      15、os.walk(topdirpath, topdown=True, onerror=None, followlinks=False)
      os.walk()
      函數(shù)聲明:walk(top,topdown=True,onerror=None)
      1>參數(shù)top表示需要遍歷的目錄樹的路徑
      2>參數(shù)topdown的默認值是"True",表示首先返回目錄樹下的文件,然后在遍歷目錄樹的子目錄.Topdow
      n的值為"False"時,則表示先遍歷目錄樹的子目錄,返回子目錄下的文件,最后返回根目錄下的文件
      3>參數(shù)onerror的默認值是"None",表示忽略文件遍歷時產(chǎn)生的錯誤.如果不為空,則提供一個自定義函
      數(shù)提示錯誤信息后繼續(xù)遍歷或拋出異常中止遍歷
      4>該函數(shù)返回一個元組,該元組有3個元素,這3個元素分別表示每次遍歷的路徑名,目錄列表和文件
      列表
      dirpath, dirnames, filenames
      對于每個目錄樹中的目錄根在頂部(包括頂部本身,但不包括.和..),產(chǎn)生一個3元組
      組成的元組對象(dirpath,dirnames,文件名)
      第一元素就是頂層目錄,也就是walk方法的第一個參數(shù)
      第二元素是頂層目錄下子目錄的列表
      第三個元素為該目錄的文件組成的列表
      dirroot.next() 第一次是查找的目錄為頂層目錄
      第二次迭代就是頂層目錄下其他字目錄,然后依次就可以獲取所有目錄下面的文件
      為了得到一個完整的路徑(頂部開始)到一個文件或目錄dirpath,做os.path.join(dirpath,filename)。
      默認情況下,os.walk不遵循符號鏈接到子目錄支持它們的系統(tǒng)。為了得到這個功能,設(shè)置可選參數(shù)'followlinks為true
      將根目錄和文件名連接在一起【包括目錄和子目錄都join】
      for root,dir,file in os.walk('/root'):
           [os.path.join(root,name) for name in file]
      這個結(jié)果是每個文件和每個文件夾都是一個列表
      ...
      for root,dir,file in os.walk('/root'):
          for filename in file:  
            os.path.join(root,filename)
      這個結(jié)果顯示每一個文件的路徑(包括隱藏文件)
      ....
      >>> path_collection=[]                                     
      >>> for root,dir,file in os.walk('/root'):                 
      ...     for filename in file:                              
      ...             fullpath=os.path.join(root,filename)                
      ...             path_collection.append(fullpath)
      將目錄全部文件的路徑,保存到一個列表對象
           
      ..........   
      將根目錄和子目錄連接在一起
      for root, dirs, files in os.walk('/root'):
          [os.path.join(root,dirname) for dirname in dirs]
      >>> for root, dirs, files in os.walk('/root'):                       
      ...     print root, "consumes",                                 
      ...     print sum([getsize(join(root, name)) for name in files]),
      ...     print "bytes in", len(files), "non-directory files"
      每一個目錄都是root
      (二)用戶相關(guān)
      os.getuid()
      os.getgid()
      os.getgroups()
      os.getlogin() 登陸用戶
      (二)進程相關(guān)
      1、獲取當(dāng)前進程
      os.getpid
      2、執(zhí)行操作系統(tǒng)命名
      1)os.system(command)
      這個方法直接返回命令的結(jié)果
      command = "ls -l"
      os.system(command)
      os.system('ps -aux|grep python')
      2)os.popen(command)
      這個方法將命令返回值得保存到一個文件對象里,這個對象需要通過read()等方法讀取內(nèi)容。
      Open a pipe to/from a command returning a file object. 這個文件對象保留在內(nèi)存中。
      p=os.popen('ssh 10.3.16.121 ps aux | grep mysql')
      x=p.read()
      print x
      p.close()
      print os.popen('ps aux | grep python').read()
      如果不確定參數(shù)的安全性, 那么最好使用 exec 或 spawn
      3、啟動新的進程
      >>> import os
      >>> program = "python"
      >>> arguments = ["hello.py"]
      >>> os.execvp(program, (program,) +  tuple(arguments))
      hello again, and welcome to the show
      使用的是execvp函數(shù),它會從【標(biāo)準(zhǔn)路徑搜索執(zhí)行程序】,把第二個參數(shù)(元組)作為單獨的參數(shù)傳遞給程
      序,并使用當(dāng)前的環(huán)境變量來運行程序. 其他七個同類型函數(shù)。
      在 Unix 環(huán)境下, 你可以通過組合使用 exec , fork 以及 wait 函數(shù)來從當(dāng)前程序調(diào)用另一個程序,
      fork 函數(shù)復(fù)制當(dāng)前進程, wait  函數(shù)會等待一個子進程執(zhí)行結(jié)束.
      3、os 模塊調(diào)用其他程序 (Unix)
      >>> def run(program, *args):
      ...     pid = os.fork()
      ...     if not pid:
      ...             os.execvp(program, (program,) +  args)
      ...     return os.wait()[0]
      >>> run("python", "hello.py")
      hello again, and welcome to the show
      1701
      fork函數(shù)在子進程中返回0(這個進程首先從fork返回值),在父進程中返回一個非0的進程標(biāo)識符(子進程的PID). 也就是說,
      只有當(dāng)我們處于父進程的時候 "not pid" 才為真.(即在子進程中pid為0,pid==0為真,在父進程中not pid(not 0),pid>0為真)
      通過os模塊中的fork方法,一個進程(Process)可以生成一個獨立子進程。fork是一個程序拷貝(copyi
      ng-program)的過程:當(dāng)程序調(diào)用fork方法,操作系統(tǒng)生成一份該程序及其在內(nèi)存中的進程的新的拷貝
      ,并以與原始程序并行的方式開始執(zhí)行這份拷貝。原始程序稱為父進程,新生成的拷貝叫做子進程。父
      進程可以生成任意數(shù)目的子進程,子進程還可以生成它的子進程。這些子進程在操作系統(tǒng)的控制下相互獨立的并行運行。子進程可以繼續(xù)運行即便父進程已退出。
      >>> def run(program, *args):
      ...     pid = os.fork()
      ...     if not pid:
      ...             os.execvp(program, (program,) +  args)
      ...     return os.wait()  
      ...
      >>> run("python", "hello.py")            
      hello again, and welcome to the show
      (1546, 0)
      os.wait() 返回一個元組,這個兩個數(shù)據(jù)代表什么? 第一元組已完成的子進程號pid,第二個元素為0表示子進程的退出狀態(tài)
      os.wait函數(shù)用于等待子進程結(jié)束(只適用于UNIX兼容系統(tǒng))。該函數(shù)返回包含兩個元素的元組,包括已完成的子進程號pid。以及子進程的退出狀態(tài),返回狀態(tài)為0,表明子進程成功完成。返回狀態(tài)為正整數(shù)表明子進程終止時出錯.
      如沒有子進程,會引發(fā)OSError錯誤。os.wait
      要求父進程等待它的任何一個子進程結(jié)束執(zhí)行,然后喚醒父進程。要指示父進程等候一個指定的子進程終止,可在父進程中使用os.waitpid
      函數(shù)(只適用于unix兼容系統(tǒng)).
      它可等候一個指定進程結(jié)束,然后返回一個雙元素元組,其中包括子進程的pid和子進程的退出狀態(tài)。函數(shù)調(diào)用將pid
      作為第一個參數(shù)傳遞。并將一個選項作為第二個選項,如果第一個參數(shù)大于0,則waitpid會等待該pid結(jié)束,如果第一個參數(shù)是-1
      ,則會等候所有子進程,也就和os.wait一樣
      參考http://developer.51cto.com/art/201003/185584.htm
      fork和wait 函數(shù)在 Windows 上是不可用的, 但是你可以使用 spawn 函數(shù), 不過, spawn
      不會沿著路徑搜索可執(zhí)行文件, 你必須自己處理好這些
      4、使用 os 模塊調(diào)用其他程序 (Windows)
      os.spawnv(os.P_WAIT, file, (file,) + args)
      5、使用 spawn 或 fork/exec 調(diào)用其他程序
      6、處理守護進程(Daemon Processes)
      Unix系統(tǒng)中,你可以使用fork函數(shù)把當(dāng)前進程轉(zhuǎn)入后臺(一個"守護者/daemon").一般來說,需要派生(fo
      rk off)一個當(dāng)前進程的副本, 然后終止原進程
      import os
      import time

      pid = os.fork()
      if pid:
          os._exit(0) # kill original
      print "daemon started"
      time.sleep(10)
      print "daemon terminated"
      7、使用os模塊終止當(dāng)前進程
      os._exit(0)
      (三)執(zhí)行操作系統(tǒng)命名
      command = "ls -l"
      os.system(command)
      os.system('ps -aux|grep python')
      (四)其他
      1、獲取環(huán)境變量
      os.getenv('USER',default=None)
      os.getenv('HOSTTYPE',default=None)
      2、修改環(huán)境
      putenv(key, value)
      3、判斷操作系統(tǒng)
      os.name
      if os.name in ("nt", "dos"):
          exefile = ".exe"
      else:
          exefile = "
      (五)os.path模塊
      os.path模塊包含了各種處理長文件名(路徑名)的函數(shù).先導(dǎo)入os模塊,然后就可以以os.path訪問該模

      1)簡單的方法
      拆分,目錄名,文件名,連接
      import os
      filename = "my/little/pony"
      print "using", os.name, "..."
      print "split", "=>", os.path.split(filename)
      print "splitext", "=>", os.path.splitext(filename)
      print "dirname", "=>", os.path.dirname(filename)
      print "basename", "=>", os.path.basename(filename)
      print "join", "=>", os.path.join(os.path.dirname(filename),os.path.basename(filename))
      結(jié)果
      using posix ...
      split => ('my/little', 'pony')
      splitext => ('my/little/pony', '')
      dirname => my/little
      basename => pony
      join => my/little/pony
      注意這里的 split 只分割出最后一項(不帶斜杠).
      2、判斷文件或文件夾是否存在
      >>> os.path.exists(filename)
      False
      >>> os.path.exists('/root')
      True
      >>> os.path.exists('/root/wc.py')   
      True
      3、判斷是否是目錄
      >>> os.path.isdir('/root/wc.py')     
      False
      >>> os.path.isdir('/root')     
      True
      4、判斷是否是文件
      >>> os.path.isfile('/root')  
      False
      >>> os.path.isfile('/root/wc.py') 
      True
      5、判斷是否是連接文件,是否是掛載文件
      >>> os.path.islink('/root/wc.py')
      >>> os.path.ismount('/root/wc.py')
      6、判斷兩個目錄是否有相同的文件
      >>> os.path.samefile('/root/pathdir1','/root/pathdir2')
      True
      做了鏈接,判斷就為真。
      7、獲取文件(文件夾)大小
      >>> os.path.getsize('/root/pathdir1')
      512L
      8、獲取文件時間戳
      創(chuàng)建時間
      >>> os.path.getctime('/root/pathdir1/person.py')
      修改時間
      >>> os.path.getmtime('/root/pathdir1/person.py')   
      訪問時間
      >>> os.path.getatime('/root/pathdir1/person.py')
      9、walk(top, func, arg)
      Directory tree walk with callback function.
      os.path.walk()
      函數(shù)聲明:walk(top,func,arg)
      1>參數(shù)top表示需要遍歷的目錄樹的路徑
      2>參數(shù)func表示回調(diào)函數(shù),對遍歷路徑進行處理.所謂回調(diào)函數(shù),是作為某個函數(shù)的參數(shù)使用,當(dāng)某個
      時間觸發(fā)時,程序?qū)⒄{(diào)用定義好的回調(diào)函數(shù)處理某個任務(wù).回調(diào)函數(shù)必須提供3個參數(shù):第1個參數(shù)為wa
      lk()的參數(shù)arg,第2個參數(shù)表示目錄列表,第3個參數(shù)表示文件列表
      3>參數(shù)arg是傳遞給回調(diào)參數(shù)func的元組.回調(diào)函數(shù)的一個參數(shù)必須是arg,為回調(diào)函數(shù)提供處理參數(shù).
      參數(shù)arg可以為空
      import os
      def callback(arg, directory, files):
          for file in files:
              print os.path.join(directory, file), repr(arg)

      os.path.walk("/root", callback, "secret message"
      os.path.walk的第三個參數(shù)傳給回調(diào)函數(shù)做第一參數(shù),os.path.walk的第一個參數(shù)(目錄)傳遞給回
      調(diào)函數(shù)做第二個函數(shù),回調(diào)函數(shù)的第三個函數(shù)就是目錄下的file.
      os.path.walk()與os.walk()產(chǎn)生的文件名列表并不相同.os.path.walk()產(chǎn)生目錄樹下的目錄路徑和\
      文件路徑,而os.walk()只產(chǎn)生文件路徑.
      # -*- coding: utf-8 -*-
      import os
      for root, dirs, files in os.walk('/root'):
              open('/tmp/rootdir', 'a').write("%s %s %s" % (root,dirs,files))

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多