1. 程式人生 > >os模塊目錄操作詳解

os模塊目錄操作詳解

shell pri command 創建文件 權限 需要 window下 獲取 ctime

os模塊是一個功能強大模塊,主要提供操作系統相關功能接口,例如:文件目錄操作,進程相關操作,執行系統命令,解析環境變量等。
使用os模塊,我們首先要導入:

import os

下面我們對這些功能逐一介紹。

1:目錄相關操作:

目錄相關常用操作如下表:

方法 說明
os.getcwd() 獲取當前腳本工作的目錄路徑
os.getcwdb() 同上,返回byte對象
os.chdir(path) 修改當前目錄為path
os.mkdir(path, mode=0o777, *, dir_fd=None) 創建目錄
os.makedirs(name, mode=0o777, exist_ok=False) 創建多層目錄
os.rmdir(path, *, dir_fd=None) 刪除目錄
os.removedirs(name) 刪除多級目錄
os.listdir(path=‘.‘) 返回指定目錄下所有文件
scandir(path=‘.‘) 返回叠代器,內容為指定目錄下所有文件目錄
os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True) 修改路徑權限
os.rename(src, dst,...) os模塊修改文件名

相關操作如下:

#開發環境ubuntu
#獲取當前目錄
dirname = ‘test‘
pwd = os.getcwd()
print(‘當前工作目錄:‘,pwd)
path = ‘/home/hyg/tmp‘
#獲取指定文件夾下所有文件
listf = os.listdir(path)
print(f‘{path}files:{listf}‘)
#切換當前工作目錄
os.chdir(path)
#查看當前路徑:
print(‘切換工作目錄:‘,os.getcwd())
#當前目錄下創建目錄
os.mkdir(dirname)
#顯示當前目錄下文件
print(f‘{path}files:{os.listdir("./")}‘)
#刪除目錄:
os.rmdir(dirname)
#切回當前目錄
os.chdir(pwd)
#顯示當前目錄
print(‘當前工作目錄:‘,pwd)

輸出結果:

當前工作目錄: /home/hyg/tmp
/home/hyg/tmpfiles:[‘1.jpg‘, ‘2.jpg‘]
切換工作目錄: /home/hyg/tmp
/home/hyg/tmpfiles:[‘test‘, ‘1.jpg‘, ‘2.jpg‘]
當前工作目錄: /home/hyg/tmp

2:os.path相關方法

這些方法包括目錄判斷,路徑獲取,路徑拼接,文件信息獲取;

2.1 文件判斷

方法 說明
os.path.isdir(s) 判斷是否為目錄 ,如果為目錄返回True
os.path.isfile(s) 判斷是否為文件 ,如果為文件返回True
os.path.exists(path) 判斷文件或目錄是否存在 ,存在返回True

2.2 文件路徑獲取

方法 說明
os.path.dirname(path) 返回目錄所在路徑
os.path.split(p) 目錄切分,返回元組(head,tail
os.path.basename(p) 返回最後一級目錄
os.path.join(a, *p) 目錄拼接
os.path.abspath(path) 獲取文件絕對路徑

這裏我們要註意basename, split,來看兩個例子:

def func(path):
    print(f‘split   :{path}, result:{os.path.split(path)}‘)
    print(f‘basename:{path}, result:{os.path.basename(path)}‘)
path = ‘/home/linux/test/1.txt‘
func(path)
path = ‘/home/linux/test/‘
func(path)
func(‘1.txt‘)

輸出結果:

split   :/home/linux/test/1.txt, result:(‘/home/linux/test‘, ‘1.txt‘)
basename:/home/linux/test/1.txt, result:1.txt
split   :/home/linux/test/, result:(‘/home/linux/test‘, ‘‘)
basename:/home/linux/test/, result:
split   :1.txt, result:(‘‘, ‘1.txt‘)
basename:1.txt, result:1.txt

註意路徑及輸出格式。

關於目錄拼接:很多代碼實現如下面這種方式:

path = ‘/home/linux/test‘
fpath = path + ‘/‘ + ‘1.txt‘
print(fpath)

輸出結果:

/home/linux/test/1.txt

這種方式問題:

1>跨平臺問題,linux與window下目錄表達方式不一樣;
2>路徑拼接,註意目錄之間分隔符,有嚴格限制,容易出錯;

我們可以使用下面這種方式:

path = ‘/home/linux/test/‘
fpath = os.path.join(path, ‘1.txt‘)
print(fpath)
path = ‘/home/linux/test‘
fpath = os.path.join(path, ‘1.txt‘)
print(fpath)

輸出結果:

/home/linux/test/1.txt
/home/linux/test/1.txt

path的最後有沒有反斜杠,join都可以處理,但是字符串拼接這種方式顯然不行。

2.3 獲取文件信息

方法 說明
os.stat(path, *, dir_fd=None, follow_symlinks=True) 獲取文件或目錄信息
os.path.getatime(filename) 獲取文件最後訪問時間
os.path.getctime(filename)) 獲取文件最後改變時間
os.path.getmtime(filename) 獲取文件最後修改時間
os.path.getsize(filename) 獲取文件大小

getctime與getmtime都是獲文件最後修改時間,區別在哪裏?文件修改方式:

1>文件內容修改;對兩個方法獲取時間都有影響;
2>文件權限,用戶修改;只對getctime獲取時間有影響;

使用Python代碼驗證:

import os
path = ‘/home/linux/test/1.txt‘
#獲取文件修改時間
print(‘ctime:‘,os.path.getctime(path), ‘mtime:‘, os.path.getmtime(path))
#修改文件權限
os.chmod(path, 777)
#獲取文件修改時間
print(‘ctime:‘,os.path.getctime(path), ‘mtime:‘, os.path.getmtime(path))
#獲取文件大小
print(os.path.getsize(path))

輸出結果:

ctime: 1554518401.870203 mtime: 1554518401.870203
ctime: 1554518438.9467654 mtime: 1554518401.870203
5

3:其他一些方法

方法 說明
os.system(command) 執行命令
os._exit(status) 退出當前進程,需要添加退出狀態
os.getenv(key, default=None) 獲取指定環境變量
os.putenv(name, value, /) 設置指定環境變量
os.environ 環境變量獲取與設置

os._exit可以直接讓當前運行程序退出,並能夠添加退出狀態;
我們首先來看system的使用,我們要在一直指定目錄創建文件,
linux下創建目錄的shell 命令:touch fname;

path = ‘/home/linux/test/tmp‘
print(os.listdir(path))
fname = os.path.join(path, ‘1.txt‘)
print(fname)
#創建文件
os.system(‘/usr/bin/touch %s‘%fname)
print(os.listdir(path))

輸出結果:

[]
/home/linux/test/tmp/1.txt
[‘1.txt‘]

可以看到使用system在path目錄中創建文件。

下面再來看環境變量設置,這裏我們有兩種方式獲取環境變量:

1>os.getenv,根據環境變量名稱直接獲取,如果沒有獲取值為None
2>os.environ,獲取系統所有環境變量,可以使用字典方式去獲取設置環境變量;

對應設置環境變量,os.putenv對於某些平臺可能不支持,可以使用os.environ設置;
下面我們拉具體操作:

print(‘HOME=‘, os.getenv(‘HOME‘))
#設置環境變量
os.putenv(‘Test‘, ‘testval‘)
#獲取環境變量
print(‘Test=‘, os.getenv(‘Test‘))
#使用environ
print(‘environ[HOME]=‘, os.environ[‘HOME‘])
#設置環境變量Test
os.environ[‘Test‘] = ‘testval‘
#獲取環境變量
print(‘Test=‘, os.getenv(‘Test‘))

可以看到,在ubuntu中使用putenv不生效,我們可以使用os.environ替換。
os模塊還有很多其他常用方法與屬性,遇到問題可以查閱官網文檔。

os模塊目錄操作詳解