python3之os库和pathlib库
#os标准库
import os
# 当前 Python 运行所在的环境 posix,nt,java
print(os.name) # nt
# os.getcwd()获取当前工作路径
print(os.getcwd())
dir = "./files/foo/bar/bar2"
file = os.path.join(dir, "c.txt")
# os.path.join() 可以将多个传入路径组合为一个路径
print(file)
# 获得绝对路径
path_abs = os.path.abspath(file)
print(path_abs)
# 判断传入路径是否是绝对路径
print(os.path.isabs(path_abs))
# 获得路径中包含的文件名和目录
print(os.path.basename(file))
print(os.path.dirname(file))
# 将路径分割成文件名和目录两个部分,放在一个tuple中返回
print(os.path.split(file))
# 检测目录、文件是否存在
print(os.path.exists(file))
print(os.path.exists(dir))
# 路径是否指向常规文件、目录文件
print(os.path.isfile(file))
print(os.path.isdir(dir))
# 查询文件大小、上一次读取的时间、上一次修改的时间
print(os.path.getsize(file))
print(os.path.getatime(file))
print(os.path.getmtime(file))
# 去除路径path中的冗余
print(os.path.normpath(os.path.join(dir, "../../")))
# 查询多个路径的共同部分
print(os.path.commonprefix([dir, file]))
# os.walk函数需要传入一个路径作为top参数,函数的作用是在以top为根节点的目录树中游走,
# 对树中的每个目录生成一个由(dirpath, dirnames, filenames)三项组成的三元组
for item in os.walk("."):
print(item)
# os.listdir列出(当前)目录下的全部路径(及文件)
def get_filelists(file_dir="."):
list_directory = os.listdir(file_dir)
filelists = []
for file_name in list_directory:
file = os.path.join(file_dir, file_name)
if os.path.isfile(file):
filelists.append(file_name)
return filelists
# print(get_filelists())
# os.makedirs递归创建一个路径,如果指定路径已存在,则会抛出FileExistsError异常
try:
os.makedirs(dir)
except FileExistsError:
print("文件夹已存在")
else:
print("创建成功")
# os.rename()函数的作用是将文件或路径重命名,一般调用格式为os.rename(src, dst)
try:
os.rename("files/a.txt", "files/b.txt")
os.rename("files/b.txt", os.path.join(dir, "c.txt"))
except FileNotFoundError:
print("源文件不存在")
except FileExistsError:
print("目标文件已经存在")
except OSError:
print("没有权限")
else:
print("重命名成功")
# os.remove() 删除文件 os.removedirs 递归删除文件路径
try:
if os.path.isfile(dir):
os.remove(dir)
print("%s 是一个文件" % dir)
else:
os.removedirs(dir)
print("%s 是一个路径" % dir)
except OSError:
print("目錄不是空的")
else:
print("删除成功")
# os.chdir是切换当前工作路径为指定路径
os.chdir("./files")
pathlib库
from pathlib import Path
# 文件当前所在目录
path_curr = Path.cwd()
print(path_curr)
# 用户主目录
print(Path.home())
# 目录拼接
print(Path.cwd() / "files")
# 创建、删除目录
(Path.cwd() / "files/foo2").mkdir() # 单层目录
(Path.cwd() / "files/foo2").rmdir() # 单层目录
file = Path.cwd() / "files/a.txt"
# 读写文件
with file.open("w") as f: # 文件不存在即创建后打开。
f.write("python") # 写入 python 字符串。
print(file.read_text()) # python
file.write_text(data="php")
print(file.read_text()) # php
str2byte = bytes("python", encoding="utf-8")
file.write_bytes(str2byte)
print(file.read_bytes()) # b'python'
print(file.read_text()) # python
# 获取文件所在目录的不同部分
ph = Path("files/a.txt").resolve() # 返回文件的完整路径
print(ph) # 文件的完整路径
print(ph.name) #:a.txt 文件完整名称(文件名+后缀名)
print(ph.stem) # a 文件名
print(ph.suffix) # txt 文件后缀名
print(ph.parent) # 文件所在的文件夹名
print(ph.anchor) # 文件所在的盘符
# 判断文件、路径是否存在
print(ph.exists()) # True
print(ph.is_dir()) # False
print(ph.is_file()) # True
# 文件统计以及匹配查找
for val in (Path.cwd() / "files").glob("*.txt"): # 返回直接目录下所有与 pattern 匹配的文件,返回生成器类型
print(val)
for val in (Path.cwd() / "files").rglob("*.txt"): # 返回递归目录下所有与 pattern 匹配的文件,返回生成器类型
print(val)
for val in (Path.cwd() / "files").iterdir(): # 返回直接目录下所有文件及目录,返回生成器类型
print(val)
print(Path.cwd() / "files/")