Python中,并没有提供直接操作目录的函数或者对象,而是需要使用内置的os
和os.path
模块实现。常用的目录操作主要有判断目录是否存在、创建目录、删除目录和遍历目录等,均是在windows系统下进行。
在Python中,内置了os
模块及其子模块os.path
用于对目录或文件进行操作。首先需要使用import
导入。
import os
print(os.name)
'''
nt
'''
上述代码输出为nt
说明在windows系统下。
在Windows操作系统下输出os.linesep
,用于获取当前操作系统上的换行符:
>>> import os
>>> os.linesep
'\r\n'
sep
:用于获取当前操作系统所使用的路径分隔符。
>>> import os
>>> os.sep
'\\'
os
模块中提供的与其目录相关的函数:
os.path
模块也提供了一些操作目录的函数:
用于定位一个文件或者目录的字符串被称为一个路径。在程序开发时,通常会涉及两种路径,一种是相对路径,另一种是绝对路径。
在Python中,可以通过os
模块提供的getcwd()
函数获取当前工作目录。相对路径就是依赖于当前工作目录的。如果在当前工作目录下有一个名称为message.txt
的文件,那么在打开这个文件时,就可以直接写上文件名,这时采用的就是相对路径。
import os
print(os.getcwd())
'''
C:\Users\包文强\Desktop\python练习\文件
'''
绝对路径是指在使用文件时指定文件的实际路径。它不依赖于当前工作目录。在Python中,可以通过os.path
模块提供的abspath()
函数获取一个文件的绝对路径。
import os
print(os.getcwd())
print(os.path.abspath('message.txt'))
'''
C:\Users\包文强\Desktop\python练习\文件
C:\Users\包文强\Desktop\python练习\文件\message.txt
'''
如果想要将两个或者多个路径拼接到一起组成一个新的路径,可以使用os.path
模块提供的join()
函数实现。
import os
print(os.path.join("C:\\Users\\包文强\\Desktop\\python练习\\文件",
"bmi.py"))
'''
C:\Users\包文强\Desktop\python练习\文件\bmi.py
'''
使用os.path.join()
函数拼接路径时,并不会检测路径是否是真的存在。
使用os.path
模块提供的exists()
函数可以判断给定的怒目是否存在。
import os
print(os.path.exists("C:\\Users\包文强\Desktop\python练习\文件\bmi.py"))
'''
False
'''
import os
print(os.path.exists("C:\\Users\包文强\Desktop\python练习\文件\message.txt"))
'''
True
'''
os
模块提供了两个创建目录的函数,一个用于创建一级目录,另一个用于创建多级目录。
创建一级目录是指一次只能创建一级目录。可以使用os
模块提供的mkdir()
函数实现。通过该函数只能创建指定路径中的最后一级目录,如果该目录的上一级不存在,则抛出FileNotFoundError
异常。
import os
path = "C:\\demo"
if not os.path.exists(path):
os.mkdir(path)
print("目录创建成功!")
else:
print("该目录已经存在了!")
'''
目录创建成功!
'''
由下图可以看到,目录下的文件夹,已经创建成功。若再次执行上述代码,则显示目录已经存在了。
使用os
模块提供的makedirs()
函数,该函数用于采用递归的方式创建目录。
import os
os.makedirs("C:\\demo\\test\\dir\\mr")
'''
C:\demo\test\dir\mr
'''
多级路径已经建好。
删除目录可以使用os
模块提供的rmdir()
函数实现。
import os
os.rmdir("C:\\demo\\test\\dir\\mr")
执行上面的代码后,将删除C:\demo\test\dir
目录下的mr
目录。如果删除不存在的目录,则会报错,所以可以实现用条件语句进行判断。
import os
path = "C:\\demo\\test\\dir\\mr"
if os.path.exists(path):
os.rmdir(path)
print("目录删除成功!")
else:
print("该目录不存在!")
'''
该目录不存在!
'''
使用rmdir()
只能删除空的目录,如果想要删除空的目录,使用Python内置的标准模块中的shutil
的rmtree()
函数。
在Python中,os
模块的walk()
函数用于实现遍历目录的功能。
import os
tuples = os.walk("C:\\Users\包文强\Desktop\python练习\文件")
for tuple in tuples:
print(tuple, '\n')
'''
('C:\\Users\\包文强\\Desktop\\python练习\\文件', [], ['antmanor_message.py', 'bjut.jpg', 'directory.py', 'message.txt'])
'''
函数返回值:返回一个包括3个元素(dirpath,dirnames, filenames
)的元组生成器对象。其中,dirpath
表示当前遍历的路径,是一个字符串;dirnames
表示当前路径下包含的子目录,是一个列表;filenames
表示当前路径下包含的文件,也是一个列表。
import os
path = 'C:\\Users\包文强\Desktop\别拿蹦迪开玩笑'
print('【', path, '】 目录下的文件:')
for root, dirs, files in os.walk(path, topdown=True):#表示自上而下遍历,true,自下而上 false
for name in dirs:
print('子目录:', os.path.join(root, name))
for name in files:
print('文件:', os.path.join(root, name))
'''
【 C:\Users\包文强\Desktop\别拿蹦迪开玩笑 】 目录下的文件:
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\.idea
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\__MACOSX
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\.idea\inspectionProfiles
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\.idea\misc.xml
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\.idea\modules.xml
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\.idea\workspace.xml
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\.idea\别拿蹦迪开玩笑.iml
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\__MACOSX\别拿蹦迪开玩笑
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\__MACOSX\别拿蹦迪开玩笑\._.DS_Store
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\__MACOSX\别拿蹦迪开玩笑\._data_loader.py
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\__MACOSX\别拿蹦迪开玩笑\._readme.txt
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\.ipynb_checkpoints
子目录: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\input
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\.DS_Store
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\data_loader.py
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\main.ipynb
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\readme.txt
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\result_G.csv
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\.ipynb_checkpoints\main-checkpoint.ipynb
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\input\test.h5
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\input\testB.h5
文件: C:\Users\包文强\Desktop\别拿蹦迪开玩笑\别拿蹦迪开玩笑\input\train.h5
'''
再次遍历一遍该目录:
import os
path = 'C:\\Users\包文强\Desktop\别拿蹦迪开玩笑'
print('【', path, '】 目录下的文件:')
p = os.walk(path)
for i in p:
print(i,'\n')
'''
【 C:\Users\包文强\Desktop\别拿蹦迪开玩笑 】 目录下的文件:
('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑', ['.idea', '__MACOSX', '别拿蹦迪开玩笑'], [])
('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\.idea', ['inspectionProfiles'], ['misc.xml', 'modules.xml', 'workspace.xml', '别拿蹦迪开玩笑.iml'])
('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\.idea\\inspectionProfiles', [], [])
('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\__MACOSX', ['别拿蹦迪开玩笑'], [])
('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\__MACOSX\\别拿蹦迪开玩笑', [], ['._.DS_Store', '._data_loader.py', '._readme.txt'])
('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\别拿蹦迪开玩笑', ['.ipynb_checkpoints', 'input'], ['.DS_Store', 'data_loader.py', 'main.ipynb', 'readme.txt', 'result_G.csv'])
('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\别拿蹦迪开玩笑\\.ipynb_checkpoints', [], ['main-checkpoint.ipynb'])
('C:\\Users\\包文强\\Desktop\\别拿蹦迪开玩笑\\别拿蹦迪开玩笑\\input', [], ['test.h5', 'testB.h5', 'train.h5'])
'''