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实际的应用中,我们经常会用到该函数将两个或多个文件的路径进行合并。