os.path模块
1. os.path模块的介绍
os.path其实是os模块的子模块,其实就是个子包。
在os模块中,我们可以对文件夹进行若干的操作,而os.path模块中包含的更多都是文件、文件夹属性获取的操作。
import os
2. 路径判断
# 1. 判断路径是否是真实存在的
print(os.path.exists('./test'))
print(os.path.exists('../test'))
# 2. 判断路径表达的是否为文件 [检验的后缀的情况]
print(os.path.isfile('./test/hello.txt'))
print(os.path.isfile('./test/hello'))
# 3. 判断路径表达的是否为文件夹
print(os.path.isdir('./test/hello.txt'))
print(os.path.isdir('./test')) # True
# 4. 判断路径表达的是否为绝对路径
print(os.path.isabs('./test')) # absolute False
print(os.path.isabs(os.getcwd())) # True
# 5. 获取相对路径对应的绝对路径
print(os.path.abspath('./test'))
# 6. 获取路径中的最后一级路径名
path = r'C:\Users\shawn\Documents\上课资料\语法基础\day18\代码\BaseProject\day18\test\hello.txt'
print(os.path.basename(path))
# 7. 获取路径中包含最后一个的文件夹路径
print(os.path.dirname(path))
# C:\Users\shawn\Documents\上课资料\语法基础\day18\代码\BaseProject\day18\test
# 8. 获取文件的后缀名 结果是一个二元组 如果是文件 第二个元素就是后缀名 文件夹的话就是空字符串【按照后缀切割 路径, 后缀名】
print(os.path.splitext(path))
# ('C:\\Users\\shawn\\Documents\\上课资料\\语法基础\\day18\\代码\\BaseProject\\day18\\test\\hello', '.txt')
print(os.path.splitext(r'C:\Users\shawn\Documents\上课资料\语法基础\day18\代码\BaseProject\day18\test'))
# ('C:\\Users\\shawn\\Documents\\上课资料\\语法基础\\day18\\代码\\BaseProject\\day18\\test', '')
# 9. 路径拼接
super_path = r'C:\\Users\\shawn\\Documents\\上课资料\\语法基础\\day18\\代码\\BaseProject\\day18\\test'
print(os.path.join(super_path, 'hello.txt'))
# C:\\Users\\shawn\\Documents\\上课资料\\语法基础\\day18\\代码\\BaseProject\\day18\\test\hello.txt
3. 文件属性获取
# 1. 获取文件的字节大小
print(os.path.getsize('./1.OS模块.py'))
# 2. 获取文件的创建时间
print(os.path.getctime('./1.OS模块.py'))
import datetime
print(datetime.datetime.fromtimestamp(1661916953.9453664))
# 3. 获取文件的修改时间
print(os.path.getmtime('./1.OS模块.py'))
print(datetime.datetime.fromtimestamp(1661917233.2336862))
# 4. 获取文件的访问时间
print(os.path.getatime('./1.OS模块.py'))
print(datetime.datetime.fromtimestamp(1661930617.1276166))
4. 练习
获取指定目录下的所有的文件
import os
def get_all_file(dir_path):
file_names = os.listdir(dir_path)
for fn in file_names:
file_path = os.path.join(dir_path, fn)
if os.path.isfile(file_path):
print(file_path)
elif os.path.isdir(file_path):
get_all_file(file_path)
get_all_file('./test')
'''
./test
|- demo hello.txt
|- ./test/demo
|- 1.txt dir
|- 2.txt
'''
import os
def print_all_files(path, level):
"""
需求:获取一个路径下的所有的子文件
:param path: 需要查询文件的路径
:return:
"""
prefix = "|" + "----|" * level
print(prefix, end=os.path.basename(path))
print()
# 1. 获取到所有的子文件
sub = os.listdir(path)
# 2. 遍历每一个文件
for f in sub:
# 3. 拼接路径
full_path = os.path.join(path, f)
# 4. 判断
if os.path.isfile(full_path):
print(prefix, end=f)
print()
else:
print_all_files(full_path, level + 1)
print_all_files("/Users/shawn/PycharmProjects/pythonProject", 0)
删除指定的文件夹
import os
def remove_path(dir_path):
file_names = os.listdir(dir_path)
for fn in file_names:
file_path = os.path.join(dir_path, fn)
if os.path.isfile(file_path):
os.remove(file_path)
elif os.path.isdir(file_path):
remove_path(file_path)
os.rmdir(dir_path)
remove_path('./test1')