python os库的简单介绍以及文件目录树的应用(tree命令的实现)

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)

猜你喜欢

转载自blog.csdn.net/huabuxiu/article/details/80033801