Python文件处理IV——目录处理

一,简介

关于目录的处理,我们主要使用的是os模块

1,os模块的介绍

官方文档:os --- 操作系统接口模块 — Python 3.7.13 文档

该模块提供了与操作系统相关的函数,例如:获取系统信息,文件与目录操作,执行系统命令等。

2,主要内容

文件与目录的操作基本包含三个板块:

  • 目录操作:创建,删除,复制,移动目录
  • 遍历目录:获取目录下所有文件;获取目录及子目录下的所有文件
  • 其他:是否为目录;文件目录是否存在;路径拼接等

二,相关模块和方法

1,相关模块:
import os
import shutil
2,相关方法:
  • os有关方法
方法说明
os.getcwd()返回表示当前工作目录
os.mkdir(name)/os.rmdir(name)创建目录/删除目录
os.makedirs(name)/os.removedirs(name)创建目录树/删除目录
os.listdir(path=None)获取指定目录下所有文件目录
os.rename(src, dst,..)文件目录重命名
os.renames(old, new)递归方式重命名目录或者文件
os.walk(top, topdown=True,…)获取指定目录下所有文件目录,返回目录树迭代器
os.remove(path, dir_fd=None)删除文件
  • shutil
方法说明
shutil.move(src, dst)   移动目录
shutil.copyfileobj(src,dest,length=16*1024)将src内容拷贝到dest, src,dest为读写文件对象
shutil.copyfile(src, dst)整个文件拷贝
shutil.copymode(src, dst)仅拷贝权限。内容、组、用户均不变。
shutil.copystat(src, dst)仅复制所有的状态信息,包括权限,组,用户,时间等
shutil.copytree(src, dst)递归方式拷贝目录树

三,相关操作

1,目录创建,重命名,删除

具体步骤:

  • 获取当前路径
  • 在指定目录下创建新目录
  • 将新创建的目录重命名
  • 删除创建的目录

首先,获取当前的文件路径,使用getcwd()可以获得当前文件所处的文件路径

 import os
 path = os.getcwd()
 print("当前目录:", path)
#输出:当前目录: D:\Jupyter\Homework of course

创建新目录:

#创建目录
create_dir = r'D:\Jupyter\Homework of course\tmp1'
rename_dir = r'D:\Jupyter\Homework of course\tmp2'
#创建目录,注意:如果目录已经存在,创建异常
os.mkdir(create_dir)

运行第一次,生成了文件目录

运行第二次,报错:

修改文件名和删除:

#修改目录名,注意,如果目录存在,重命名失败
os.rename(create_dir, rename_dir)
#删除目录
os.rmdir(rename_dir)
2,目录树创建与删除
import shutil
new_dir_tree = r'D:\Jupyter\Homework of course\tmp1\level1'
del_dir_tree = r'D:\Jupyter\Homework of course\tmp1'
#常见目录树
os.makedirs(new_dir_tree)
#删除多级目录
shutil.rmtree(del_dir_tree)

第一步的运行结果:

3,判断相关操作

要点:

  • 判断文件或者目录是否存在?
  • 判断指定路径是否是文件或者目录?
#判断路径是否存在
path = r'D:\Jupyter\Homework of course'
print(os.path.exists(path))
#判断路径是否是目录
print(os.path.isdir(path))
#判断路径是否是文件
fpath = r'D:\Jupyter\Homework of course\csv_write_test.csv'
print(os.path.isfile(fpath))

#三个输出都是True
4,获取文件信息

这一步主要是获取文件的状态和大小

import os
import shutil
fpath = r'D:\Jupyter\Homework of course\csv_write_test.csv'
print(os.stat(fpath))
print(os.path.getsize(fpath))

'''
Output:
os.stat_result(st_mode=33206, st_ino=5629499534259965, st_dev=3872741387, st_nlink=1, st_uid=0, st_gid=0, st_size=59, st_atime=1716737696, st_mtime=1716737669, st_ctime=1716737669)
59


'''

对于stat_result的参数说明:

字段说明
st_mode             inode 保护模式
st_inoinode 节点号。
st_devinode 驻留的设备。
st_nlinkinode 的链接数。
st_uid所有者的用户ID。
st_gid所有者的组ID。
st_size以字节为单位的大小;
st_atime上次访问的时间。
st_mtime最后一次修改的时间。
st_ctime由操作系统报告的"ctime"

5,文件路径操作

主要包括:

  • 获取当前文件的绝对路径
  • 获取指定路径的名称与目录名称
  • 路径的拼接
#获取当前文件绝对路径
current_abs_path = os.path.abspath('.')
print(current_abs_path)
#获取指定路径的名称
abs_path = r'D:\Jupyter\Homework of course\csv_write_test.csv'
fname = os.path.basename(abs_path)
print("当前文件名:", fname)
fpath = os.path.dirname(abs_path)
print("当前文件路径:", fpath)
#路径拼接,为了实现代码跨平台,建议使用os.path.join
full_path = os.path.join(fpath, fname)
print("全路径:", full_path)

结果:

D:\Jupyter\Homework of course
当前文件名: csv_write_test.csv
当前文件路径: D:\Jupyter\Homework of course
全路径: D:\Jupyter\Homework of course\csv_write_test.csv

6,遍历目录

操作:

  • 获取指定目录下的文件,子目录
  • 获取指定目录下文件,子目录及子目录下文件与子目录

获取指定目录下的文件,子目录

root_path = r'D:\Jupyter\Homework of course'
file_list = os.listdir(root_path)
for name in file_list:
    print(name)

输出:

'''
.ipynb_checkpoints
1686117568248-题目1数据 (1).csv
csv_write_test.csv
hw1
hw1.zip
hw2
hw2.zip
hw3
hw3.zip
hw4
hw4.zip
Untitled.ipynb
'''

获取指定目录下文件,子目录及子目录下文件与子目录:

使用方法:os.walk(top, topdown=True, οnerrοr=None, followlinks=False)

返回值:目录树的生成器,每条数据组成如下: dirpath, dirnames, filenames

root_path = r'D:\Jupyter\Homework of course'
for root, _, flist in os.walk(root_path):
    for fname in flist:
        full_path = os.path.join(root, fname)
        print(full_path)

输出:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值