python 基本库(os、shutil、glob)

字数 1610阅读 315

来源1:寒风
来源2:追逐的博客

一.os包

os包包括各种各样的函数,以实现操作系统的许多功能。这个包非常庞杂。
​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) # 查询文件名称中的扩展名
示例(单独示例):


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)返回结果一模一样。
print(info[1]) #info[1]返回完成文件名称,即test.txt,与os.path.dirname(path)返回结果一模一样。

path2 = os.path.join('/', 'home', 'User', 'Document', 'file1.txt') # 使用目录名和文件名构成一个路径字符串
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)) # 路径是否指向常规文件
print(os.path.isdir(path)) # 路径是否指向目录文件


os包的一些命令就是用于文件管理。
mkdir(path)
创建新目录,path为一个字符串,表示新目录的路径,它只能一层一层地建目录。相当于$mkdir命令。注意:mkdirs(path)相当于mkdir -p /var/zs/zs1/zs2

rmdir(path)
删除空的目录,path为一个字符串,表示想要删除的目录的路径。相当于$rmdir命令。**补充一点,前面说的如果目录不空,就不能用 os.removedirs() 删除(removedirs删除多级空目录,rmdir删除一级空目录)。但是,可以用模块 shutil 的 rmtree 方法。如:import shutil
shutil.rmtree(path)

listdir(path)
返回目录中所有文件。相当于$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指向的文件的权限。相当于$chmod命令。

chown(path, uid, gid)
改变path所指向文件的拥有者和拥有组。相当于$chown命令。

stat(path)
查看path所指向文件的附加信息,相当于$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)

从结果中看,可能看不出什么来,先不用着急。这样的结果是对 computer 姑娘友好的,对读者可能不友好。如果用下面的方法,就友好多了:

fi = os.stat(pf)
mt = fi[8]

fi[8] 就是 st_mtime 的值,它代表最后 modified(修改)文件的时间。看结果:

mt
1429580969

还是不友好。下面就用 time 模块来友好一下:

import time
time.ctime(mt)
'Tue Apr 21 09:49:29 2015'

现在就对读者友好了。

symlink(src, dst)
为文件dst创建软链接,src为软链接文件的路径。相当于$ln -s命令。

getcwd()
查询当前工作路径 (cwd, current working directory),相当于$pwd命令。

os.system() 是在当前进程中执行命令,直到它执行结束。如果需要一个新的进程,可以使用 os.exec 或者os.execvp。另外,os.system() 是通过 shell 执行命令,执行结束后将控制权返回到原来的进程,但是os.exec() 及相关的函数,则在执行后不将控制权返回到原继承,从而使 Python 失去控制。
system(command) -> exit_status(返回执行状态码,0或1)
不管是什么操作系统,只要如下操作就能打开网页了:
import webbrowser
webbrowser.open("http://www.itdiffer.com")
不必再使用os.system(command)那么繁琐了,需要找浏览器路径。

os.popen(command):返回文件对象,将命令执行结果组织成文件对象。类似于linux shell编程中的command或$(command),这两个命令执行后返回的是命令执行结果,而非命令执行状态码。
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)
复制文件,从src到dst。相当于$cp命令。
move(src, dst)
移动文件,从src到dst。相当于$mv命令。

比如我们想复制文件a.txt:
import shutil
shutil.copy( 'a.txt','b.txt')
以上相关函数跟Linux系统下shell命令非常相似,熟悉Linux的人一看就可以明白了。


三.glob包

glob包最常用的方法只有一个, glob.glob()。该方法的功能与Linux中的ls相似。
接受一个Linux式的文件名格式表达式(filename pattern expression),
列出所有符合该表达式的文件(与正则表达式类似),将所有文件名放在一个表中返回。
所以glob.glob()是一个查询目录下文件的好方法。

该文件名表达式的语法与Python自身的正则表达式不同,对应关系大致如下:

Filename Pattern Expression Python Regular Expression
* .*
? .

[0-9] same

[a-e] same

[^mnp] same

推荐阅读更多精彩内容