Python的os模块详解(第4节)


os模块详解

os是operation system(操作系统)的缩写,os模块提供了与操作系统交互的功能,它是Python中整理文件和目录最为常用的模块,该模块提供了非常丰富的方法用来处理文件和目录。

1、os.getcwd()函数

os.getcwd()是Python中的一个内置函数,用于获取当前工作目录的路径。这个函数不需要传递任何参数,并且会返回一个代表当前工作目录的字符串,表示当前Python脚本所在的目录路径。例如:

动手练一练:

import os  # 导入 os模块 

print(os.getcwd())

执行以上代码,输出结果为:

E:\Pyhint\condition

打开第2章【安装和运行Python】教程里面介绍的Pyhint编辑器,执行以上代码,输出默认的工作目录的路径是“Pyhint\condition”。

2、os.listdir()函数

os.listdir()函数是用于获取指定目录下的所有文件和文件夹的列表。它接受一个参数,即要获取列表的目录路径。

动手练一练:

import os  # 导入 os模块 

# 列出目录下的文件
path = r"E:\Pyhint\config"   # r代表原始字符串标识符,r""内部的字符串默认不转义
files = os.listdir(path)
print("目录下的文件:", files)

执行以上代码,输出结果为:

目录下的文件: ['config.json', 'icon.png']

上面的例子中,os.listdir(path)函数返回path目录下的所有文件和文件夹名称的列表。注意,在引号前面要加“r”。“r”代表原始字符串标识符,也就是说用r""表示""内部的字符串默认不转义,因为如果路径里面包含“\r”或“\n”等转义字符,Python会识别字符串中的转义字符并自动转换成回车换行符等。

3、os.walk()函数

os.walk()函数用于深层次遍历一个目录及其所有子目录,返回的是一个由路径、文件夹列表、文件列表组成的元组。

假设有如下的一个目录结构。你想要获取test目录及其子目录下的文件信息,那么就可以用到os.walk()函数。

test
├── 1.txt
├── dir1
   ├── 2.txt
   └── 3.txt
└── dir2
     └── 4.txt

os.walk()函数必须传入一个参数,即要获取的目录路径。例如:

动手练一练:

import os  # 导入 os模块 

path = os.walk(r"D:\test")   # test为指定目录路径,r代表原始字符串标识符,r""内部的字符串默认不转义
for root, dirs, files in path:
    print("当前目录为:", root)
    print("当前目录下的子目录有:", dirs)
    print("当前目录下的文件有:", files)
    print("-"*20)

执行以上代码,输出结果为:

当前目录为 test
当前目录下的子目录有 ['dir2', 'dir1']
当前目录下的文件有 ['1.txt']
--------------------
当前目录为 test/dir2
当前目录下的子目录有 []
当前目录下的文件有 ['4.txt']
--------------------
当前目录为 test/dir1
当前目录下的子目录有 []
当前目录下的文件有 ['2.txt', '3.txt']
--------------------

上面的例子中,os.walk()函数会返回一个元组。这个元组包含当前的文件目录、该目录下的所有子目录和该目录下的所有文件三个部分,最后我们使用“for…in…”进行遍历后分别打印出来。os.walk()函数和os.listdir()函数的区别在于,os.listdir()函数返回当前文件目录下的文件和文件夹,如果还有子目录,则子目录内的文件不会显示。而os.walk()函数则返回当前文件夹下的所有文件和文件夹,包括子目录内的文件。os.walk()函数是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。

4、os.rename()函数

os.rename()函数用于重命名文件或目录,例如,将a.txt文件(完整路径为:E:\test\a.txt)重命名为b.txt文件,可以执行如下代码:

动手练一练:

import os  # 导入 os模块 

# 注意一定要使用双斜杠“\\”,因为里面包含“\t”转义字符,“\\”可以避免“\t”被转义为水平制表符。“\t”水平制表符相当于按了键盘上的Tab按键
os.rename("E:\\test\\a.txt", "E:\\test\\b.txt")
print("重命名完毕")

执行以上代码,输出结果为:

重命名完毕

上面的例子中,可成功将位于“E:\test”下的“a.txt”文件重命名为“b.txt”。但是,如果rename()函数找不到目标文件或目录,将会抛出FileNotFoundError(系统找不到指定的路径)异常。

5、os.path.exists()函数

os.path.exists()函数可以判断指定路径下的目录是否存在。存在返回True,否则返回False。例如:

动手练一练:

import os  # 导入 os模块 

path = "E:\\Pyhint\\config"  # 路径中包含反斜杠“\”,可以使用双斜杠“\\”进行转义
if os.path.exists(path):
    print("指定文件夹存在")
else:
    print("指定文件夹不存在")

执行以上代码,输出结果为:

指定文件夹存在

上面的例子中,因为存在“E:\Pyhint\config”目录,所以输出“指定文件夹存在”。

6、os.path.dirname()函数

os.path.dirname()函数返回文件路径,不包括文件名,只返回目录,例如:

动手练一练:

import os  # 导入 os模块 

print(__file__)  # __file__输出当前文件的文件名
print(os.path.dirname(__file__))  #获取当前文件所在目录

执行以上代码,输出结果为:

E:\Pyhint\Learn-Python\test\new.py
E:\Pyhint\Learn-Python\test

上面的例子中,__file__是Python中内置的变量,它表示当前文件的文件名。os.path.dirname(__file__)表示的是文件当前的位置。

7、os.path.isfile()函数

os.path.isfile()函数可以判断给出的路径是否是一个文件,如果不是文件或者文件不存在都会返回“False”,如果是文件则返回“True”。例如:

动手练一练:

import os  # 导入 os模块 

file = os.path.isfile("E:\\Pyhint\\config")
print(file)

执行以上代码,输出结果为:

False

上面的例子中,由于“E:\Pyhint\config”是一个目录(文件夹),不是一个文件,所以输出“False”。

8、os.path.isdir()函数

os.path.isdir()函数判断给出的路径是否是一个目录(文件夹),如果不是目录或者目录不存在都会返回“False”,如果是目录则返回“True”。

动手练一练:

import os  # 导入 os模块 

file = os.path.isdir("E:\\Pyhint\\config")
print(file)

执行以上代码,输出结果为:

True

上面的例子中,“E:\Pyhint\config”是一个目录(文件夹),所以输出“True”。

9、os.mkdir()函数

os.mkdir()函数用于在当前文件目录下创建新目录(新文件夹)。注意,使用os.mkdir()只能创建单个目录(文件夹),也就是说只能创建一层目录(一个文件夹)。例如:

动手练一练:

import os

os.mkdir("d:\\test")  # 注意一定要使用双斜杠“\\”,因为里面包含“\t”转义字符,“\\”可以避免“\t”被转义

执行以上代码,就会在电脑的D盘文件夹下面新建一个test目录(文件夹)。

10、os.makedirs()函数

os.makedirs()函数用于创建多层目录,也就是说可以一次创建多级目录,哪怕中间目录不存在也能正常的(替你)创建。例如:

动手练一练:

import os

os.makedirs("d:\\test\\test1\\test2")  # 注意一定要使用双斜杠“\\”,因为里面包含“\t”转义字符,“\\”可以避免“\t”被转义

执行以上代码,就会在电脑的D盘文件夹下面新建一个test目录(文件夹),并且在test目录内新建一个test1目录(文件夹),最后在test1目录内新建一个test2目录(文件夹)。但是这里需要注意的是,如果“D:\test\test1\test2”目录(文件夹)已经存在,就会报错。因此创建目录(文件夹)之前,需要使用os.path.exists(path)函数判断目录(文件夹)是否存在。

11、os.path.join()函数

os.path.join()函数用于把两个或更多的路径拼接起来,形成一个新的完整路径。例如:

动手练一练:

import os  # 导入 os模块 

path = "D:\\test" # 注意一定要使用双斜杠“\\”,因为里面包含“\t”转义字符,“\\”可以避免“\t”被转义
list = ["a.txt", "b.txt", "c.txt"]
for i in list:
    a = os.path.join(path, i)
    print(a)

执行以上代码,输出结果为:

D:\test\a.txt
D:\test\b.txt
D:\test\c.txt

在Python实际的应用中,我们经常会用到该函数将两个或多个文件的路径进行合并。