引言
文件操作在我们日常编写程序中经常使用,因为这是最常用的存储数据的方式,为了解决在日常生活中遇到的文件读写乱码、文件内置函数遗忘等问题,所以总结了对文件及目录操作进行了整理和总结。对于文件及目录操作,使用的是os模块和os.path等模块。
一.文件基础操作
(1).文件新建、文件以读写方式打开
f=open(file, mode=’r’, buffering=None, encoding=None,…)
通过这个控制mode可以实现新建,打开文件的操作.
mode | 描述 | 举例 | 解释 |
---|---|---|---|
r | 读操作,若文件不存在则引发异常 | open(fname,’rb’) | 以方式从文件中读取 |
w | 写操作,不存在文件则新建 | open(fname,’wb’) | 写文件 |
a | 追加模式,不存在则新建 | open(fname,’a’) | 向文件追加 |
t | 文本模式(默认) | open(fname,’rt’) | 以文本模式读取文件 |
b | 二进制模式 | open(fname,’rb’) | 以二进制模式读取文件 |
+ | 打开一个带读写的文件 | open(fname,’wb+’) | 以二进制写方式打开一个可以读写的文件 |
(2).文件读写操作
函数 | 描述 |
---|---|
f.readline() | 返回读取的一行数据(f是读模式,默认文本读) |
f.read() | 以文本方式或二进制方式全部读取(f是文本读或者二进制读模式) |
f.write(str) | 写入数据 (f是写模式) |
f.flush() | 将缓存数据写入磁盘 |
f.seek(offset[,whence]) | 将文件操作标记移到offset的位置 |
f.close() | 关闭文件 |
二.文件目录进阶操作
文件目录操作部分需要用到os和os.path,shutil这3个模块
(1)文件操作
函数 | 描述 |
---|---|
os.remove(fname) | 删除文件 |
os.rename(oldname,newname) | 重命名文件 |
os.path.isfile(fname) | 判断是否是文件 |
os.path.exists(fname) | 判断文件是否存在 |
shutil.move(oldpos,newpos) | 移动文件 |
os.stat(file) | .获取文件属性 |
os.path.getsize(filename) | 获取文件大小 |
shutil.copyfile(oldfile,newfile) | oldfile和newfile都只能是文件 |
(2)目录操作
函数 | 描述 |
---|---|
os.mkdir(dirname) | 创建单个目录 |
os.makedirs(dirname) | 创建多级目录 |
os.chdir(dir) | 切换目录 |
os.rename(oldname,newname) | 文件或目录都是使用这条命令 |
os.listdir(path) | 返回指定目录下的所有文件和目录名 |
os.path.isdir(dirname) | 检验给出的路径是否是一个目录 |
shutil.rmtree(dir) | 删除(递归)目录 |
shutil.copy(oldfile,newfile) | oldf只能是文件夹,newf可以是文件,也可以是目标目录 |
shutil.copytree(olddir,newdir) | olddir和newdir都只能是目录,且newdir必须不存在 |
os.rmdir(dir) | 删除空目录 |
shutil.copytree(olddir,newdir) | olddir和newdir都只能是目录,且newdir必须不存在 |
(3)路径操作
函数 | 描述 |
---|---|
os.path.isabs() | 判断是否是绝对路径 |
os.path.isfile() | 检验给出的路径是否是一个文件 |
os.path.isdir() | 检验给出的路径是否是一个目录 |
os.path.split() | 返回一个路径的目录名和文件名 |
os.path.splitext() | 分离扩展名 |
os.path.dirname() | 获取路径名 |
os.path.basename() | 获取文件名 |
os.chdir(path) | 切换路径 |
三.实战
"""
dir:操作目录
file_typeList带过滤的文件的类型(txt,pdf等)
检索出(多层)目录下所有满足要求的文件类型的文件并进行答应
"""
def retrieveFile(dir,file_typeList):
#列出当前目录下所有的目录及文件
files=os.listdir(dir)
for f in files:
abs_file=dir+"\\"+f
#如果是目录,则调用递归函数继续处理
if os.path.isdir(abs_file):
retrieveFile(abs_file)
#如果是文件,则进行文件操作
else:
file_type=os.path.splitext()
print("文件类型:%s"%file_type)
#如果此文件类型在文件列表中
if filetype in file_typeList:
filename=os.path.basename()
print("file is %s"%filename)
四.感悟
定期归纳总结反复出现的知识点是最有效的学习方式。在文件操作这部分,我们并没有对文件读写乱码问题进行叙述,在之后的博客中,乱码问题本身就很复杂,涉及到多方面的知识点.我会对乱码这块做一个详细的分析。因为这个问题在python中实在是太常见了,也太重要了!