python的官方文档中对于OS库的介绍是 This module provides a portable way of using operating system dependent functionality.具体意思是os模块提供了简单方便的方法来使用操作系统的一些功能。就是说通过os库你可以使用python执行一些常见的操作系统的功能,比如切换目录,增删文件,设置环境变量,运行shell 命令等等。
下面就介绍一些OS库中比较常用的部分,大多数都很简单。
-
os.sep可以取代操作系统特定的路径分隔符。windows下为 “\\”
-
os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。
-
os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。
-
os.getenv()获取一个环境变量,如果没有返回none
-
os.link() 方法用于创建硬链接, 名为参数 dst,指向参数 src
-
os.mkdir() 方法用于以数字权限模式创建目录,
-
os.listdir(path)返回指定目录下的所有文件和目录名。
-
os.remove(path)函数用来删除一个文件。 如果指定的路径是一个目录,将抛出OSError, 在Unix, Windows中有效
-
os.rmdir(path )方法用于删除指定路径的目录。仅当这文件夹是空的才可以, 否则, 抛出OSError。
-
os.system(command)函数用来运行shell命令。
-
os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'。
-
os.curdir:返回当前目录('.')
-
os.chdir(dirname):改变工作目录到dirname
os.path常用方法:
-
os.path.isfile(path)和os.path.isdir(path)函数分别检验给出的路径是一个文件还是目录,绝对路径。
-
os.path.existe()函数用来检验给出的路径是否真地存在
-
os.path.getsize(name):获得文件大小,如果name是目录返回0L
-
os.path.abspath(name):获得绝对路径
-
os.path.normpath(path):规范path字符串形式
-
os.path.split(path) :将path分割成目录和文件名二元组返回。
-
os.path.splitext():分离文件名与扩展名
-
os.path.join(path,name):连接目录与文件名或目录;使用“\”连接
-
os.path.basename(path):返回文件名
-
os.path.dirname(path):返回文件路径
部分示例:
os.link() 方法
os.link() 方法用于创建硬链接,名为参数 dst,指向参数 src。
该方法对于创建一个已存在文件的拷贝是非常有用的。
只支持在 Unix, Windows 下使用。
语法:
os
.
link
(
src
,
dst
)
src -- 用于创建 硬链接的原地址
dst -- 用于创建硬链接的目标地址
示例:
import
os
,
sys
# 打开文件
path
=
"/var/www/html/foo.txt"
fd
=
os
.
open
(
path
,
os
.
O_RDWR
|
os
.
O_CREAT
)
# 关闭文件
os
.
close
(
fd
)
# 创建以上文件的拷贝
dst
=
"/tmp/foo.txt"
os
.
link
(
path
,
dst
)
os.mkdir() 方法
os.mkdir() 方法用于以数字权限模式创建目录。默认的模式为 0777 (八进制)。
语法:
os
.
mkdir
(
path
[,
mode
])
path --要创建的目录
mode --要为目录设置的权限数字模式
示例:
import
os
,
sys
# 创建的目录
path
=
"/tmp/home/monthly/daily/hourly"
os
.
mkdir
(
path
,
0755
)
第三部分,打印文件目录树(tree命令的实现)
学习了OS库,我们可以现场应用一下,实现一个简单的小工具,把某个路径下的所有文件夹和文件都打印出来打印成树状的的,效果如下
其实很简单,只用到了getcwd(),path.isdir(),listdir()和一点点数据结构的知识。首先是由listdir()方法获取当前目录下的所有文件和目录,然后使用深度优先递归遍历,判断一下是否为为目录就好,文件直接输出,是目录的递归打印遍历,注意一下缩进,缩进的长度和文件所处的深度成正比,所有增加一个深度标记就可以了,我们看一下代码
import os
import os.path
def dfs_show(path,depth):
if depth == 0:
print(path) #输出第一级目录
pathlist = os.listdir(path) #获取当前目录下的文件和目录
for item in pathlist:
if '.git' not in item:
print("| " * depth +"|___"+item)
newitem = path+'\\'+item
if os.path.isdir(newitem): #判断是否为目录
dfs_show(newitem,depth+1) #递归深度优先遍历
if __name__ == '__main__':
filepath = input("please enter path:")
dfs_show(filepath,0)
import os.path
def dfs_show(path,depth):
if depth == 0:
print(path) #输出第一级目录
pathlist = os.listdir(path) #获取当前目录下的文件和目录
for item in pathlist:
if '.git' not in item:
print("| " * depth +"|___"+item)
newitem = path+'\\'+item
if os.path.isdir(newitem): #判断是否为目录
dfs_show(newitem,depth+1) #递归深度优先遍历
if __name__ == '__main__':
filepath = input("please enter path:")
dfs_show(filepath,0)