(原創)Python文件與文件系統系列(2)——os模塊對文件、文件系統操做的支持

  os模塊的功能主要包括文件系統部分和進程管理部分,這裏介紹其中與文件系統相關的部分。python

  當請求操做系統執行操做失敗時,os模塊拋出內置異常 exceptions.OSError 的實例,能夠經過 os.error 訪問這個類型,OSError的實例有三種屬性:函數

  • errno:操做系統錯誤的錯誤代碼
  • strerror:描述錯誤的字符串;
  • filename:操做在哪一個文件上出錯。

 

1. os模塊提供的有用屬性:ui

1.1 curdirspa

>>> os.curdir
'.'

  表示當前目錄的字符串,Unix和Windows上都是「.」。操作系統

 1.2 pardircode

>>> os.pardir
'..'

  表示父目錄的字符串,Unix和Windows上都是「..」。對象

 1.3 defpathblog

>>> os.defpath
'.;C:\\bin'

  程序的默認搜索路徑,若是缺少PATH環境變量時使用。排序

 1.4 linesep進程

>>> os.linesep
'\r\n'

  文本行的結尾字符串,Unix上是'\n',Windows上是'\r\n'。

 1.5 extsep

>>> os.extsep
'\r\n'

  分隔文件的擴展名和文件名的分隔符,Unix和Windows上都是「.」。

 1.6 pathsep

>>> os.pathsep
';'

  路徑列表中用來分隔路徑的分隔符,能夠參考PATH環境變量,Unix平臺上是「:」,Windows平臺上是";"。

 1.7 sep

>>> os.sep
'\\'

  路徑組成的分割符,在Unix平臺上是"/",Windows平臺上是"\\"。

 

2. os模塊提供的與文件系統相關的方法

2.1 access(path, mode)

os.access(path, mode)
# e.g. 
>>> os.access("C:\Windows\System32", os.R_OK | os.W_OK)
True

  access()函數判斷當前進程的真實用戶(組)(real user / real group)是否具備對路徑 path 執行全部 mode 中列出的操做的權限,參數mode的可選值包括:

  • os.F_OK:路徑指定的文件是否存在;
  • os.R_OK:路徑指定的文件是否可讀;
  • os.W_OK:路徑指定的文件是否可寫;
  • os.X_OK:路徑指定的文件是否可執行;

 2.2 chdir(path)

os.chdir(path)
# e.g.
>>> os.chdir("c:/")

  等於 cd 到路徑path,即將pwd切換到 path 指定的路徑。

2.3 chmod(path, mode)

os.chmod(path, mode)

  將 path 的訪問權限設置爲mode ,mode 能夠是0或多個 os.R_OK,os.W_OK,os.X_OK,也但是3位8進制的整數(Unix平臺),如 0777, 0664等。

 2.4 getcwd()

os.getcwd()
#e.g.
>>> os.getcwd()
'c:\\'

  getcwd()獲取當前工做目錄的路徑。

 2.5 listdir(path)

os.listdir(path)

  listdir(path) 返回一個列表,列表中包括 path 路徑下的全部文件和目錄,可是不包括「.」和「..」目錄。

  listdir()返回的列表是未排序的。

 2.6 mkdirs(path, mode), mkdir(path, mode)

os.mkdirs(path, mode=0777)
os.mkdir(path, mode=0777)

  建立一個目錄,此時 path 可能涉及多級目錄,mkdirs會建立沿路全部尚不存在的目錄,而後設置訪問權限;而 mkdir()只建立 path 最右端的 基地址,基地址前面若是存在還沒有建立的目錄,mkdir()會拋出異常OSError。

  建立失敗時兩個函數都拋出OSError,當指定的路徑已經存在時也拋出相同的異常。

 2.7 remove(path), unlink(path)

os.remove(path)
os.unlink(path)

  這兩個函數刪除 path 指定的文件。

 2.8 removedirs(path)

os.removedirs(path)

  把 path 中通過的全部目錄(要求是空的目錄)都刪除。

 2.9 rmdir(path)

os.rmdir(path)

  刪除 path 指定的目錄(要求目錄爲空),刪除失敗時拋出OSError,例如刪除的目錄非空。

 2.10 rename(src, dest)

os.rename(src, dest)

  將文件或目錄 src 重命名爲 dest。

  2.11 renames(src, dest)

os.renames(src, dest)

  重命名,可是重命名的過程當中會自動建立參數 dest 中全部的尚不存在的中間路徑,重命名後會刪除 src 中包含的空目錄。

 2.12 stat(path)

os.stat(path)

  返回一個 stat_result 類型的值,例如:

1 >>> mode = os.stat("test1.py")
2 >>> type(mode)
3 <type 'nt.stat_result'>
4 >>>
5 >>> mode
6 nt.stat_result(st_mode=33206, st_ino=0L, st_dev=0, st_nlink=0, st_uid=0, st_gid=
7 0, st_size=22L, st_atime=1439467351L, st_mtime=1439543082L, st_ctime=1439467351L
8 )

  能夠看到stat()函數返回的 stat_result 對象的類型及一些信息,該對象提供了 10 種關於參數 path 的信息,能夠經過對應的屬性訪問這些信息,例如查看文件的大小:

1 >>> os.path.getsize('test1.py')
2 0L 3 >>> os.stat('test1.py').st_size 4 0L

   這10種關於文件、目錄的信息及其對應的屬性名稱分別爲:

屬性名 含義
st_mode 訪問控制與其餘模式位
st_ino I節點的序號
st_dev 設備號
st_nlink 硬連接數
st_uid 屬主的UID
st_gid 屬主的GID
st_size 大小(單位:字節)
st_atime 最後訪問時間(自epoch以來的秒數)
st_mtime 最後修改時間
st_ctime 最後一次狀態改變的時間

 2.13 utime(path, times)

os.utime(path, times=None)

  設置文件的最後訪問和最後修改時間,

  • 若是 times 是None,則utime()使用當前的時間;
  • 若是 times 不爲None,則 times 必須是一個二元組——(accessed, modified),即指定最後訪問和修改的時間,這裏這兩個值都要是自 epoch 以來的秒數。

 2.14 walk(top, topdown, onerror)

os.walk(top, topdown=True, onerror=None)

  首先,這個函數是一個生成器!用來遍歷參數 top 指定的目錄

  • 當參數 topdown 爲True(默認情形)時,從 top 向其子目錄遍歷
  • 當參數 topdown 爲False時,倒序從 top 目錄樹的葉節點開始,反向遍歷

  參數 onerror :

  • 若是是None,則walk()忽略遍歷過程當中遇到的一切OSError異常
  • 不然必須是一個函數,以異常OSError的實例爲惟一的參數,一旦walk()遇到異常,就將其傳遞給 onerror()函數,onerror()能夠自由定義。

  walk() 每次生成的 item 都是一個三元組——(dirpath, dirnames, filenames),其中:

  • dirpath:當前遍歷到的目錄的名稱;
  • dirnames:列表,包含當前目錄的全部直接子目錄名(不包括 "." 和 "..");
  • filenames:列表,包含當前目錄中的全部文件名;

例:

import os
for dirpath, dirnames, filenames in os.walk("d:\\programs"): dirnames[:] = [ d for d in dirnames if not d.startswith('.') ] for name in filenames: print os.path.join(dirpath, name)

 

  該例子將會打印出」d:\\programs「目錄下,全部不以 「.」 開頭的目錄中的全部文件,

  注意在 topdown 爲True時,遍歷到一層目錄時,修改生成獲得的dirnames列表,能夠影響下一層將要遍歷的子目錄個數和順序,好比這裏就在遍歷時剔除了以「.」開頭的目錄。

相關文章
相關標籤/搜索