python 基本库(os、shutil、glob)

来源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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容