1. 程式人生 > >os模塊(二)

os模塊(二)

文件訪問 大小 創建時間 ets os.walk call 操作系統 語法 是你

os.path.exists(path)
判斷目錄/文件是否存在

>> os.path.exists("e:\python")
True
>> os.path.exists("e:\python\1.txt")
True
...
os.path.isfile(file)
判斷是否是文件
>> if os.path.isfile("e:\python\1.txt"):
... print "a file"
...
a file
os.path.isdir(file)
判斷是否是目錄
>> if os.path.isdir("e:\python\1.txt"):

... print "a dir"
...

小練習:
刪除一個目錄下文件
import os
import os.path
os.chdir("e:\python2")
list1 = os.listdir("e:\python2")
for content in list1:
if os.path.isfile(content):
os.remove(content)

os.stat(path)

用於在給定的路徑上執行一個系統 stat 的調用
Path指定路徑
返回值:
stat 結構:
?st_mode:?inode 保護模式
?st_ino:?inode 節點號。

?st_dev:?inode 駐留的設備。
?st_nlink:?inode 的鏈接數。
?st_uid:?所有者的用戶ID。
?st_gid:?所有者的組ID。
?st_size:?普通文件以字節為單位的大小;包含等待某些特殊文件的數據。
?st_atime:?上次訪問的時間。
?st_mtime:?最後一次修改的時間。
?st_ctime:?由操作系統報告的"ctime"。在某些系統上(如Unix)是最新的元數據更改的時間,在其它系統上(如Windows)是創建時間(詳細信息參見平臺的文檔)。

os.wakl()
概述
os.walk() 方法用於通過在目錄樹中遊走輸出在目錄中的文件名,向上或者向下。

os.walk() 方法是一個簡單易用的文件、目錄遍歷器,可以幫助我們高效的處理文件、目錄方面的事情。在Unix,Windows中有效。
walk()方法語法格式如下:
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
參數
top?-- 是你所要遍歷的目錄的地址, 返回的是一個三元組(root,dirs,files)。

root 所指的是當前正在遍歷的這個文件夾的本身的地址
dirs 是一個 list ,內容是該文件夾中所有的目錄的名字(不包括子目錄)
files 同樣是 list , 內容是該文件夾中所有的文件(不包括子目錄)
topdown?--可選,為 True,則優先遍歷 top 目錄,否則優先遍歷 top 的子目錄(默認為開啟)。如果topdown 參數為 False,walk 會遍歷top文件夾,與top 文件夾中每一個子目錄。
onerror?-- 可選, 需要一個 callable 對象,當 walk 需要異常時,會調用。
followlinks?-- 可選, 如果為 True,則會遍歷目錄下的快捷方式(linux 下是 symbolic link)實際所指的目錄(默認關閉)。

返回值
該方法沒有返回值。

實例:
#coding=utf-8
import os
for root,dirs,files in os.walk("e:\python",topdown=False) :
print "當前目錄:",root
for name in files :
print ‘文件名:‘,os.path.join(root,name)
for name in dirs :
print ‘目錄名:‘,name

小練習:
打印文件a.txt的文件路徑
import os
result_list = []
def find_file(path):
for root,dirs,files in os.walk(path,topdown=False) :
for file in files:
if "a.txt" in file:
result_list.append(os.path.join(root,file))
return result_list

print find_file("e:\python")

2、求一個文件路徑下所有文件的數量
import os
def find_file(path):
count_file = 0
for root,dirs,files in os.walk(path,topdown=False) :
for file in files:
print u"文件名",file
count_file += 1
return count_file
print find_file("e:\python")

3、找出txt文件的個數
import os
def find_file(path):
count_file = 0
for root,dirs,files in os.walk(path,topdown=False) :
for file in files:
if "txt" in file:#if file.find("txt") != -1:
count_file += 1
return count_file

print find_file("e:\python")

>> os.path.dirname("e:\python\1.txt")
‘e:\python‘
4、查看目錄下的所有文件
方式1:
for root,dirs,files in os.walk("e:\python",topdown=False):
for file in files:
os.chdir(root)
print os.path.abspath(file)
方式2:
for root,dirs,files in os.walk("e:\python",topdown=False) :
for file in files:
print os.path.join(root,file)

os.path.abspath(path)
返回一個文件的絕對路徑

>> os.path.abspath("1.txt")
‘E:\python\1.txt‘

os.path.split(file)
將path分割成目錄和文件名(事實上,如果你完全使用目錄,它也會將最後一個目錄作為文件名而分離,同時它不會判斷文件或目錄是否存在),並存於元組中返回。

>> os.path.split("e:\python\1.txt")
(‘e:\python‘, ‘1.txt‘) 元組

os.path.dirname(filepath)
返回path的目錄路徑,其實就是os.path.split(path)的第一個元素

>> os.path.dirname("e:\python\hu.txt")
‘e:\python‘

os.path.basename(filepath)
返回path最後的文件名。如果path以/或\結尾,就會返回空值。即
os.path.split(path)的第二個元素。

>> os.path.basename("e:\python\hu.txt")
‘hu.txt‘

os.path.isabs(path)
判斷路徑是否是絕對路徑

>> os.path.isabs("e:\python\1.txt")
True

os.path.normpath(path)
將path轉換成規範的文件路徑

>> os.path.normpath("e:/python")
‘e:\python‘
>> os.path.normpath("c:/d/2")
‘c:\d\2‘
>> os.path.normpath("c:/d\2")
‘c:\d\x02‘

os.path.getsize(filepath)
返回文件大小,目錄返回4096

>> os.path.getsize("e:\python\1.txt")
39L
>> os.path.getsize("e:\python")
4096L 這個是目錄

os.path.join(a, *p)
連接兩個或更多的路徑名,中間以“\”分隔,如果所給的參數中都是絕對路徑名,那先給的絕對路徑將會被丟棄。

>> import os
>> os.path.join("e:\python","1.txt")
‘e:\python\1.txt‘

>> os.path.join("e","python","1.txt")
‘e\python\1.txt‘

os.path.splitext(filepaht)
分離文件名與擴展名,切出文件後綴名

>> os.path.splitext("e:\python\1.txt")
(‘e:\python\1‘, ‘.txt‘)

>> file_name = os.path.split("e:\python\1.txt")[1]
>> file_postfix = os.path.splitext(file_name)
>> print file_postfix[1]
.txt

>> os.path.splitext(os.path.split("e:\python\1.txt")[1])[1]
‘.txt‘

小練習:
找出一個目錄及子目錄下的所有文件名字,不含後綴
filename_list = []
for root,dirs,files in os.walk("e:\python\",topdown = False):
for file in files:
print file
filename_list.append(os.path.splitext(file)[0])
print filename_list

os.path.splitdrive(filepath)
拆分驅動器和文件路徑,並以元組返回結果;主要針對win有效,Linux元組第一個總是空

>> import os
>> os.path.splitdrive("e:\python\1.txt") 切盤符
(‘e:‘, ‘\python\1.txt‘)

os.path.getatime(filename)
獲取文件的最後訪問時間,返回的是時間戳,1970到現在的秒數

>> os.path.getatime("e:\python\hu.txt")
1234567.0

>> time_arr = time.localtime(os.path.getatime("e:\python\1.txt"))
>> time_arr
time.struct_time(tm_year=2018, tm_mon=5, tm_mday=24, tm_hour=16, tm_min=24, tm_sec=40, tm_wday=3, tm_yday=144, tm_isdst=0)
>> time.strftime("%Y-%m-%d %H:%M:%S",time_arr)
‘2018-05-24 16:24:40‘

封裝獲取文件訪問時間函數
import os
import time
def get_file_access_time(file_path):
file_time=os.path.getatime(file_path)
return get_time(file_time)

def get_time(timestamp):
time_arr = time.localtime(timestamp)#返回時間元組
return time.strftime("%Y-%m-%d %H:%M:%S",time_arr)

if name == "main":
print get_file_access_time("e:\python\1.txt"

os.path.getctime(path)
以時間戳的形式返回文件或目錄的創建時間,在Unix系統上
是文件最近更改的時間,在Windows上是文件或目錄的創建>>> os.path.getctime("e:\python\1.txt")創建時間
1527150280.032749

>> os.path.getctime("e:\python")
1527149411.9510975

os.path.getmtime(path)
以時間戳的形式返回文件或目錄的修改時間,

>> os.path.getmtime("e:\python\1.txt")
1527152386.11821
>> os.path.getmtime("e:\python")
1527670010.1196618

os模塊(二)