python3之os库和pathlib库

发布时间 2023-09-08 17:15:02作者: carol2014

#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 directory in list_directory:
        if os.path.isfile(directory):
            filelists.append(directory)
    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/")