Python操作文件(夹)

在日常工作中, 我们有时需要处理大量文件以及文件夹, 本文介绍python中操作文件(夹)的模块osshutil 以及查看文件状态的模块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'