一.os包
os包包括各種各樣的函數(shù),以實(shí)現(xiàn)操作系統(tǒng)的許多功能。這個包非常龐雜。
?import os.path
path="/home/User/Document/test.txt"
print(os.path.basename(path)) # 查詢路徑中包含的文件名
print(os.path.dirname(path)) # 查詢路徑中包含的目錄
filename=os.path.basename(path) # 查詢路徑中包含的文件名
extension_name=os.path.splitext(filename) # 查詢文件名稱中的擴(kuò)展名
示例(單獨(dú)示例):
import arcpy.mapping as mapping,os
path = r"C:"
f = open("BrokenDataLinks.txt","w")
for root,dirs,files in os.walk(path):
for filename in files:
basename,extension = os.path.splitext(filename)
if extension = ".mxd":
fullpath = os.path.join(root,filename)
mxd = mapping.MapDocument(fullpath)
f.write("MXD:" + filename + "\n")
brknList = mapping.ListBrokenDataSources(mxd)
for brknItem in brknList:
f.write("\t" + brknItem.name + "\n")
f.close()
path="/home/User/Document/test.txt"
info = os.path.split(path) # 將路徑分割成文件名和目錄兩個部分,放在一個表中返回
print(info[0]) #info[0]返回路徑,即/home/User/Document,注意最后無/,與os.path.basename(path)返回結(jié)果一模一樣。
print(info[1]) #info[1]返回完成文件名稱,即test.txt,與os.path.dirname(path)返回結(jié)果一模一樣。
path2 = os.path.join('/', 'home', 'User', 'Document', 'file1.txt') # 使用目錄名和文件名構(gòu)成一個路徑字符串
print(path2)
p_list = [path, path2]
print(os.path.commonprefix(p_list)) # 查詢多個路徑的共同部
另外還有:
print(os.path.exists(path)) # 查詢文件是否存在
print(os.path.getsize(path)) # 查詢文件大小
print(os.path.getatime(path)) # 查詢文件上一次讀取的時間
print(os.path.getmtime(path)) # 查詢文件上一次修改的時間
print(os.path.isfile(path)) # 路徑是否指向常規(guī)文件
print(os.path.isdir(path)) # 路徑是否指向目錄文件
os包的一些命令就是用于文件管理。
mkdir(path)
創(chuàng)建新目錄,path為一個字符串,表示新目錄的路徑,它只能一層一層地建目錄。相當(dāng)于$mkdir命令。注意:mkdirs(path)相當(dāng)于mkdir -p /var/zs/zs1/zs2
rmdir(path)
刪除空的目錄,path為一個字符串,表示想要刪除的目錄的路徑。相當(dāng)于$rmdir命令。**補(bǔ)充一點(diǎn),前面說的如果目錄不空,就不能用 os.removedirs() 刪除(removedirs刪除多級空目錄,rmdir刪除一級空目錄)。但是,可以用模塊 shutil 的 rmtree 方法。如:import shutil
shutil.rmtree(path)
listdir(path)
返回目錄中所有文件。相當(dāng)于$ls命令。
例如:
import os
dir = "E:\testData\spark\spark1.6"
files=os.listdir(dir)
for file in files:
if os.path.isfile(file):
print file
#file僅僅是一個不帶目錄的文件名
f = open(dir + "\" + file,'r')
print f.readlines()
f.close
remove(path)
刪除path指向的文件。
rename(src, dst)
重命名文件,src和dst為兩個路徑,分別表示重命名之前和之后的路徑。
chmod(path, mode)
改變path指向的文件的權(quán)限。相當(dāng)于$chmod命令。
chown(path, uid, gid)
改變path所指向文件的擁有者和擁有組。相當(dāng)于$chown命令。
stat(path)
查看path所指向文件的附加信息,相當(dāng)于$ls -l命令。
示例如下:
指定一個文件
path=r"e:\zs"
pf = path + "/README.md"
此文件的信息
os.stat(pf)
posix.stat_result(st_mode=33279, st_ino=67L, st_dev=26L, st_nlink=1, st_uid=0, st_gid=0, st_size=50L, st_atime=1429580969, st_mtime=1429580969, st_ctime=1429580969)
從結(jié)果中看,可能看不出什么來,先不用著急。這樣的結(jié)果是對 computer 姑娘友好的,對讀者可能不友好。如果用下面的方法,就友好多了:
fi = os.stat(pf)
mt = fi[8]
fi[8] 就是 st_mtime 的值,它代表最后 modified(修改)文件的時間??唇Y(jié)果:
mt
1429580969
還是不友好。下面就用 time 模塊來友好一下:
import time
time.ctime(mt)
'Tue Apr 21 09:49:29 2015'
現(xiàn)在就對讀者友好了。
symlink(src, dst)
為文件dst創(chuàng)建軟鏈接,src為軟鏈接文件的路徑。相當(dāng)于$ln -s命令。
getcwd()
查詢當(dāng)前工作路徑 (cwd, current working directory),相當(dāng)于$pwd命令。
os.system() 是在當(dāng)前進(jìn)程中執(zhí)行命令,直到它執(zhí)行結(jié)束。如果需要一個新的進(jìn)程,可以使用 os.exec 或者os.execvp。另外,os.system() 是通過 shell 執(zhí)行命令,執(zhí)行結(jié)束后將控制權(quán)返回到原來的進(jìn)程,但是os.exec() 及相關(guān)的函數(shù),則在執(zhí)行后不將控制權(quán)返回到原繼承,從而使 Python 失去控制。
system(command) -> exit_status(返回執(zhí)行狀態(tài)碼,0或1)
不管是什么操作系統(tǒng),只要如下操作就能打開網(wǎng)頁了:
import webbrowser
webbrowser.open("http://www.itdiffer.com")
不必再使用os.system(command)那么繁瑣了,需要找瀏覽器路徑。
os.popen(command):返回文件對象,將命令執(zhí)行結(jié)果組織成文件對象。類似于linux shell編程中的command或$(command),這兩個命令執(zhí)行后返回的是命令執(zhí)行結(jié)果,而非命令執(zhí)行狀態(tài)碼。
popen(...)
popen(command [, mode='r' [, bufsize]]) -> pipe
Open a pipe to/from a command returning a file object.
for line in os.popen("ls -l /mnt"):
print(line)
二. shutil包
copy(src, dst)
復(fù)制文件,從src到dst。相當(dāng)于$cp命令。
move(src, dst)
移動文件,從src到dst。相當(dāng)于$mv命令。
比如我們想復(fù)制文件a.txt:
import shutil
shutil.copy( 'a.txt','b.txt')
以上相關(guān)函數(shù)跟Linux系統(tǒng)下shell命令非常相似,熟悉Linux的人一看就可以明白了。
三.glob包
glob包最常用的方法只有一個, glob.glob()。該方法的功能與Linux中的ls相似。
接受一個Linux式的文件名格式表達(dá)式(filename pattern expression),
列出所有符合該表達(dá)式的文件(與正則表達(dá)式類似),將所有文件名放在一個表中返回。
所以glob.glob()是一個查詢目錄下文件的好方法。
該文件名表達(dá)式的語法與Python自身的正則表達(dá)式不同,對應(yīng)關(guān)系大致如下:
Filename Pattern Expression Python Regular Expression
* .*
? .
[0-9] same
[a-e] same
[^mnp] same