Python操作目录及文件

os模块:提供了一种使用与操作系统相关的功能的便捷式途径
os.path模块 :操作文件路径
glob模块:Unix 风格路径名模式扩展
shutil 模块:对于高级文件和目录处理
open():读写一个文件
fileinput模块 :读取通过命令行给出的所有文件中的所有行
tempfile模块 :创建临时文件和目录

os模块

提供了一种使用与操作系统相关的功能的便捷式途径。

import os
# 获取系统CPU的数量
os.cpu_count()
# 检验权限模式 777可读可写可执行
os.access(path, mode=777)
# 更改权限为777
os.chmod(path, mode=777)

# 更改当前进程的根目录
os.chroot(path)
# 改变当前的工作目录
os.chdir(path)
# 获取当前工作目录
os.getcwd()

# 获取指定path包含的文件或文件夹的名字列表
names = os.listdir(path)
# 获取指定路径下包含所有的文件夹和文件(含子目录), 返回值为生成器 每次遍历的对象都是返回的是一个三元元组(root,dirs,files)
# root 所指的是当前正在遍历的这个文件夹的本身的地址
# dirs 是一个list ,内容是该文件夹中所有的目录的名字(不包括子目录)
# files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
os.walk(top, topdown=True, οnerrοr=None, followlinks=False)

# 创建指定目录, 目录存在会报错
os.mkdir(path)
# 递归创建目录, exist_ok=True时, 目录存在不报错
os.makedirs(name, exist_ok=False)

# 删除文件. 传入文件夹会报错
os.remove(file)
# 删除空文件夹
os.removedirs(path)
# 删除空目录. 目录非空,报错OSError
os.rmdir(path)

案例: 给定路径下, 找出包含子目录在内的所有.txt文件

import os

path = r'D:\Workspace\NavBatch\DataTest\T5'
for root, dirs, files in os.walk(path):
    # root: 当前正在遍历的这个文件夹的路径
    # dirs: 当前正在遍历的这个文件夹中所有目录的名字列表(不包括子目录)
    # files: 当前正在遍历的这个文件夹中所有文件的名字列表(不包括子目录)
    for file in files:
        # 以.txt结尾
        if file.endswith(".txt"):
            print(os.path.join(root, file))

案例: 给定路径下, 找出包含子目录在内的所有包含de1-de9的文件

import os
import glob

path = r'D:\Workspace\NavBatch\DataTest\T5'
de_list = []
for root, dirs, files in os.walk(path):
    temp_list = glob.glob(os.path.join(root, '*de[1-9]*'))
    for log in temp_list:
        de_list.append(log)
print(de_list)

os.path模块

常用操作文件路径以及获取文件属性

import os

# os.path 获取文件属性
path = r'D:\Workspace\data\data.csv'
# 返回绝对路径
os.path.abspath(path)
# 返回软链的地址
os.path.realpath(path)
# 返回文件名
os.path.basename(path)
# 返回文件或者目录的上一级目录
os.path.dirname(path)

# 判断路径是否存在
os.path.exists(path)
# 判断是否为绝对路径
os.path.isabs(path)
# 判断路径是否为文件
os.path.isfile(path)
# 判断路径是否为目录
os.path.isdir(path)
# 判断路径是否为链接
os.path.islink(path)
# 判断路径是否为挂载点
os.path.ismount(path)

# 把path中包含的"~"和"~user"转换成用户目录
os.path.expanduser(path)
# 根据环境变量的值替换path中包含的"$name"和"${name}"
os.path.expandvars(path)

# 返回最近访问时间(浮点型秒数)
os.path.getatime(path)
# 返回最近文件修改时间
os.path.getmtime(path)
# 返回文件 path 创建时间
os.path.getctime(path)
# 返回文件大小,如果文件不存在就返回错误
os.path.getsize(path)

# 把目录和文件名合成为一个路径
os.path.join('./data', 'test.csv')

# 把路径分割成 目录 和 文件名,返回一个元组
os.path.split(path)
# ('D:\\Workspace', 'data.csv')
# 分割路径,返回路径名和文件扩展名的元组
os.path.splitext(path)
# ('D:\\Workspace\\data', '.csv')
# 一般用在windows下,返回驱动器名和路径组成的元组
os.path.splitdrive(path)
# 把路径分割为加载点与文件
os.path.splitunc(path)

# 判断目录或文件是否相同
path2 = './data.csv'
os.path.samefile(path, path2)

# 转换path的大小写和斜杠
os.path.normcase(path)
# 规范path字符串形式
os.path.normpath(path)

glob模块

glob 支持 * ? [] 这三种通配符
* 代表0个或多个字符
? 代表一个字符
[] 匹配指定范围内的字符,如[0-9]匹配数字

案例: glob + os.path 筛选文件

import glob
import os

# 筛选指定目录下的py文件
py_list = glob.glob(os.path.join(path, '*.py'))
# 筛选指定路径下包含de1-de9的文件
de_list = glob.glob(os.path.join(path, '*de[1-9]*'))

shutil模块

提供了一系列对文件和文件集合的高阶操作,特别是提供了一些支持文件拷贝和删除的函数

import shutil

# shutil.copyfileobj(fsrc, fdst[, length])
# 将文件内容拷贝到另一个文件中
shutil.copyfileobj(open('old.xml', 'r'), open('new.xml', 'w'))

# 拷贝文件 目标文件无需存在
shutil.copyfile('src.py', 'dst.py')

# 仅拷贝权限。内容、组、用户均不变  目标文件必须存在
shutil.copymode('src.py', 'dst.py')

# 仅拷贝状态的信息,包括:mode bits, atime, mtime, flags 目标文件必须存在
shutil.copystat('src.py', 'dst.py')

# 拷贝文件和权限
shutil.copy('src.py', 'dst.py')

# 递归拷贝除.pyc文件和以tmp打头的文件或目录以外的所有条目 目标目录不能存在
shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))

# 递归删除文件夹
shutil.rmtree('test', ignore_errors=False, onerror=None)

# 递归移动文件, 重命名
shutil.move('src.py', 'dst.py')

# 创建压缩包并返回文件路径.
# 将/data下的文件压缩为gztar格式, 放置在/temp/data_bak
shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值