Python操作文件(夹)
在日常工作中, 我们有时需要处理大量文件以及文件夹, 本文介绍python中操作文件(夹)的模块os
和shutil
以及查看文件状态的模块stat
.
注意:
os
模块中也有stat
函数, 使用方法为os.stat(path, *, dir_fd=None, follow_symlinks=True)
, 模块stat
为实现os.stat()
的底层模块, 可以直接调用该模块查看文件详细信息, 也可以使用os.stat
查看文件信息.
导入相关模块
import os, stat, shutil
获取当前目录
os.getcwd()
>>>d:\Github_workspace\
获取执行文件的目录
os.path.dirname(__file__)
将目录切换至C盘下的Windows文件夹
os.chdir('C:/Windows')
将目录切换至当前执行文件的文件夹下
os.chdir(os.path.dirname(__file__))
查看当面目录下所有文件(夹)
os.listdir(path=None)
os.listdir()
>>>['node_modules', 'package.json', 'public', 'scaffolds', 'source', 'themes', '_config.yml']
文件名和扩展名分离
filaname=’hello.py’
os.path.splitext(filename)
>>>(‘hello’, ‘.py’)
查看文件(夹)信息
os.stat('./aaa.txt)
>>>os.stat_result(st_mode=33060, st_ino=1125899906847384, st_dev=1511501194, st_nlink=1, st_uid=0, st_gid=0, st_size=26, st_atime=1580096882, st_mtime=1580096858, st_ctime=1580096735)
st_mode 文件权限, st_ino 文件的inode(每个文件有单独的一个inode) 如果想要详细了解可以查看阮一峰的博客, st_dev 文件所在设备, st_nlink 文件的硬链接数, st_uid 文件所有者的用户标识, st_gid 文件所有者的组标识, st_size 文件字节数, st_atime2 最后一次访问的时间(秒), st_mtime 最后一次修改内容的时间(秒), st_ctime 由操作系统报告的”ctime”, 在某些系统上(如Unix)是最新的元数据更改的时间, 在其它系统上(如Windows)是创建时间.
修改文件(夹)权限
os.chmod(path, mode) #path为文件(夹)的路径(相对路径或者绝对路径都可以), mode为stat.S_IREAD(windows下设为只读), stat.S_IWRITE(windows下取消只读)
os.chmod('./aaa.txt',stat.S_IREAD)
修改文件(夹)名称
os.rename(src, dst) #src为原文件(夹)名称, dst为想要修改的文件(夹)名称
os.rename('D:/aa/aaa.txt', 'D:/aa/bbb.txt')
判断是否是文件(夹)
os.path.isdir(path)/os.path.isfile(path)
os.path.isdir('D:/aa/aaa.txt')
>>>False
os.path.isfile('D:/aa/aaa.txt')
>>>True
判断文件夹是否存在
os.path.exists(path)
os.path.exists('D:/aa/')
>>>True
删除文件(夹)
os.remove(path)/os.rmdir(path)
os.remove('D:/aa/ccc.txt')
os.rmdir('D:/aa/ccc')
创建文件夹
os.mkdir(path) #创建文件夹/os.makedirs(path) 多层创建文件夹
os.mkdir('./aaa/')
os.makedirs('./aaa/bbb/ccc/')
复制文件(夹)
#将文件复制到dst目录, 不会复制文件相关的Metadata, 从而导致修改了文件的相关属性如: 访问时间, 创建时间等
shutil.copy(src, dst, follow_symlinks=Ture)
#将文件复制到dst目录下, 会复制文件相关的Metadata, 不会修改文件属性
shutil.copy2(src, dst, follow_symlinks=Ture)
shutil.copy('D:/aa/aaa.txt','D:/aa/ccc.txt')
>>>'D:/aa/ccc.txt'
shutil.copy('D:/aa/aaa.txt','D:/aa/ddd.txt')
>>>'D:/aa/ddd.txt'
#与拷贝文件相对应, shutil.copytree为拷贝目录的函数
#默认使用shutil.copy2函数来拷贝文件, 因此文件相关的Metadata会被拷贝
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)
shutil.copytree('D:/aa/','D:/aa/ccc')
>>>'D:/aa/ccc'
移动文件(夹)
shutil.move(src, dst, copy_function=copy2)
shutil.move('D:/aa/aaa.txt','D:/aa/xxx.txt')
>>>'D:/aa/xxx.txt'