python os模塊
Python os 模塊提供了一個統一的操作系統接口函數
一、對于系統的操作
1、os.name 當前使用平臺
其中 ‘nt’ 是 windows,’posix’ 是linux 或者 unix
2、os.sep
輸出操作系統的特定的路徑分隔符。Win下為“\”,Linux下為“/”
3、os.pathsep 輸出分格符
輸出用于分割文件路徑的字符串。 Windows下是';',Linux下為“:”
4、os.linesep 換行符
輸出當前平臺是用的行終止符,win下為“\r\n”,Linux下為“\n”,Mac使用'\r'。
5、os.environ
獲取系統環境變量path
6、os.system('dir c:\\')
直接執行系統命令
假定有一個shell腳本test.sh:
xxx@ubuntu:~$ vi test.sh
xxx@ubuntu:~$ more test.sh
#!/bin/bash
echo 'hello python!'
echo 'hello world!'
exit 1
xxx@ubuntu:~$ vi test.sh
xxx@ubuntu:~$ more test.sh
#!/bin/bash
echo 'hello python!'
echo 'hello world!'
exit 1
>>> import os
>>> os.system("./test.sh")
hello python!
hello world!
256
>>> os.system("./test.sh")
hello python!
hello world!
256
7、os.popen()
執行一個系統命令,把執行結果存到文件句柄中(和python中open函數類似)
dirList=os.popen('dir d:\\tmp')
for i in dirList:
print i
>> import os
>>> os.popen("./test.sh")
<open file './test.sh', mode 'r' at 0x7f6cbbbee4b0>
>>> f=os.popen("./test.sh")
>>> f
<open file './test.sh', mode 'r' at 0x7f6cbbbee540>
>>> f.readlines()
['hello python!\n', 'hello world!\n']
>>> os.popen("./test.sh")
<open file './test.sh', mode 'r' at 0x7f6cbbbee4b0>
>>> f=os.popen("./test.sh")
>>> f
<open file './test.sh', mode 'r' at 0x7f6cbbbee540>
>>> f.readlines()
['hello python!\n', 'hello world!\n']
二、對于目錄的操作
1、os.getcwd()
獲取當前的工作目錄,即當前Python腳本工作的目錄路徑。
結果:E:\python\0507
2、os.chdir('d:\\')
修改當前的工作目錄
3、os.curdir
返回當前目錄
4、os.pardir
目錄切換到父目錄(上一級目錄)
三、對文件的操作
1、os.listdir('e:\\tmp')
列出指定目錄下的所有文件和子目錄,包括隱藏文件或目錄,并以列表形式返回。
2、os.rename('e:\\tmp\\1.txt','e:\\tmp\\1new.txt')
修改文件名
3、os.stat('e:\\tmp\\02.txt')
獲取文件的生命周期中的各個時間
4、os.utime(path[, (atime, mtime)]) 修改文件的時間屬性
設置文件的access and modified time為給定的時間
如果未指定atime和mtime參數,修改的時間將會是當前的時間。
5、os.access()
輸出文件是否有寫的權限:
print os.access(fileName,os.W_OK)
print os.access(fn,os.R_OK) 文件是否有讀的權限
print os.access(fn,os.X_OK) 文件是否有執行的權限
四、os.path
1、os.path.exists(path)
返回當前的目錄或者文件是否存在
判斷path是否存在,如果存在返回True,否則返回False。
2、os.path.isabs(path)
判斷路徑是否為絕對路徑
判斷path是否是絕對路徑,如果是返回True,否則返回False。
3、os.path.isfile(path)
判斷是否是文件
判斷path是否是文件,如果是返回True,否則返回False。
4、os.path.isdir(path)
判斷是否是目錄
判斷path是否是目錄,如果是目錄返回True,否則返回False。
5、os.path.getsize(path): 單位是字節
返回文件或者目錄的大小。獲得文件大小,如果name是目錄返回0L;如果name代表的目錄或文件不存在,怎會報WindowsError異常。
6、os.path.abspath(path)
獲取絕對路徑,(但這個路徑不一定是真實存在的路徑)
eg:
print os.path.abspath('d:\\tmp\\test13.txt')
print os.path.abspath('test13.txt')#返回當前執行目錄下的文件名的路徑,文件沒有的時候也會返回
print os.getcwd()
結果:
d:\tmp\test13.txt
D:\python\0512\test13.txt
D:\python\0512
7、os.path.normpath(path)
把path轉換為標準的路徑。用于解決跨平臺問題
五、從路徑中獲取盤符,文件名,擴展名,目錄
1、os.path.split(path)
對文件路徑做分割,把最后一個\\后面的文件會目錄分割出來
將path分割成目錄和文件名(事實上,如果你完全使用目錄,它也會將最后一個目錄作為文件名而分離,同時它不會判斷文件或目錄是否存在),并存于元組中返回。
eg:
print os.path.split('D:\\tt4\\c12')
print os.path.split('D:\\tt4\\c12\\')
print os.path.split('D:\\tt4\\c12\\t1.txt')
結果:
('D:\\tt4', 'c12')
('D:\\tt4\\c12', '')
('D:\\tt4\\c12', 't1.txt')
2、os.path.dirname(path)
返回目錄的名稱
返回path的目錄路徑,其實就是os.path.split(path)的第一個元素。
3、os.path.basename(path)
返回文件的名稱
返回path最后的文件名。如果path以/或\結尾,就會返回空值。即os.path.split(path)的第二個元素。
4、os.path.splitext(path)
把路徑和擴展名切分開
print os.path.splitext('01.py')
print os.path.splitext('d:\\tmp\\001.txt')
print os.path.splitext('D:\\tt4\\c12')
結果:
('01', '.py')
('d:\\tmp\\001', '.txt')
('D:\\tt4\\c12', '')
fileName,expandName = os.path.splitext(f)
把路徑和擴展名分開后可以直接賦值給兩個變量,其實得到的是一個元組
5、os.path.splitdrive(path)
拆分驅動器(盤符)和后面的路徑。拆分驅動器和文件路徑,并以元組返回結果;主要針對win有效,Linux元組第一個總是空。
返回結果是元祖
6、os.path.join(path,*paths)
把所有的路徑組合成絕對路徑。連接兩個或更多的路徑名,中間以“\”分隔,如果所給的參數中都是絕對路徑名,那最先給的絕對路徑將會被丟棄
六、os.walk()
os.walk() 方法用于通過在目錄樹中游走輸出在目錄中的文件名,向上或者向下。
在Unix,Windows中有效。
語法
walk()方法語法格式如下:
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
參數
-
top -- 根目錄下的每一個文件夾(包含它自己), 產生3-元組 (dirpath, dirnames, filenames)【文件夾路徑, 文件夾名字, 文件名】。
-
topdown --可選,為True或者沒有指定, 一個目錄的的3-元組將比它的任何子文件夾的3-元組先產生 (目錄自上而下)。如果topdown為 False, 一個目錄的3-元組將比它的任何子文件夾的3-元組后產生 (目錄自下而上)。
-
onerror -- 可選,是一個函數; 它調用時有一個參數, 一個OSError實例。報告這錯誤后,繼續walk,或者拋出exception終止walk。
-
followlinks -- 設置為 true,則通過軟鏈接訪問目錄。
以下實例演示了 walk() 方法的使用:
#!/usr/bin/python
# -*- coding: UTF-8 -*-import os for root, dirs, files in os.walk(".", topdown=False): for name in files: print(os.path.join(root, name)) for name in dirs: print(os.path.join(root, name))
執行以上程序輸出結果為:
./.bash_logout
./amrood.tar.gz ./.emacs ./httpd.conf ./www.tar.gz ./mysql.tar.gz ./test.py ./.bashrc ./.bash_history ./.bash_profile ./tmp ./tmp/test.py