python 学习笔记(三):文件操作

首先打开一个文件,为了避免文件句柄泄露,采用上下文管理器。上下文管理器使用原理:在类中必有 enterexit 方法,在with语句中会在开始调用 enter 方法,结束的时候调用 exit 方法 来实现文件的自动关闭。我们可以通过两种方式实现上下文管理器协议:1、在类的方法里面自定义上诉两种方法。2、通过 contextlib.contextmanager 的装饰器来实现(被装饰的方法要使用 try/finally 语法)。知道如何打开和关闭文件,那么接下来介绍一下文件的操作:

文件读取:

f.read() # 读取文件全部内容 (用于小文本处理)
f.readline() # 一次读取一条内容 (用于大文本处理)
f.readlines() # 文件内容存到一个列表中,列表的行对应文件中的一行(用于小文本处理)
f.seek(offset[, whence]) # offset文件的偏移量,whence 偏移位置,0从文件开头,1从当前位置,2从文件末尾 (配合 f.readline()使用)

文件写入

f.write(str) # 字符串
f.writelines(list) # 写入一个列表(不会分行)

这里要说明的一点,文件是一个可以直接迭代的对象,可以直接通过迭代文件获取文件的行数据(感觉跟 f.readlines()
一样)

文件路径和文件管理

import os
os.getcwd() # 获取当前文件的路径 同 linux 的 pwd 指令
os.listdir('.') # 获取当前目录的列表 同 linux 的 ls指令
os.chdir(path) # 切换目录,同 linux 的 cd 指令
os.unlink(path)/os.remove(path) # 删除文件
os.rmdir(path) # 删除目录,目录必须为空
os.rename(path) # 修改文件夹或者文件
os.walk(path) # 递归遍历目录下的所有文件,返回三个元组 dirpath,dirnames,filenames 三个元组内容的位置顺序一一对应

用  os.path 模块可以处理文件路径和获取文件属性:
os.path 文件路径操作模块 

###1、路径获取
os.path.expanduser('~') # 打开用户的 HMOE 目录(参数只能是 ~ 开头)
os.path.abspath(path) # 获取文件绝对路径

###2、路径拆分
os.path.split(path) # 返回文件路径与文件名: ('dirname','basename')
os.path.dirname() # 返回文件路径 
os.path.basename() # 返回文件名
os.path.splitext() # 返回文件 去除拓展部分路径和拓展信息 ('dirname/file','.text')

###3、路径构造
os.path.join() # 其目的是用于不同操作平台的路径拼接(比如window 和 linux 的路径写法就不一样)

###4、文件属性
os.path.getatime() # 文件访问时间 (get active time 的简写)
os.path.getmtime() # 文件修改时间 (get modify time 的简写)
os.path.getctime() # 文件创建时间 (get created time 的简写)
os.path.getsize() # 文件大小

###5、文件判断
os.path.isexists()
os.path.isfile()
os.path.isdir()
os.path.islink()
os.path.ismount() # path 所指向的路径是否存在且是一个挂载点

文件查找
文件查找要用到通配符:* 、?、[seq] 、[!seq]

import fnmatch # file name mathch 文件名匹配
fnmatch.fnmatch(filename,'*') # 匹配文件名
fnmatch.fnmatchcase(filename,'*') # 匹配文件名(忽略大小写) 
fnmatch.filter(filenamelist,'*') # 批量文件名匹配

glob.glob('*') # 匹配当前目录下的文件名,相当于 fnmatch.filter(os.listdir('.'),'*')

文件比较

import filecmp # file compare 文件对比模块
filecmp.cmp('file','file') # 对比两个文件是否内容一样 用hash
filecmp.cmpfiles('dir','dir',['file1','file2'[,file n]]) # 比较两个目录下 第三个参数里面指定的文件是否一样
d = filecmp.dircmo('dir','dir') # 比较两个目录之间的差异 d.report ,d.left_list,d.left_only等指令查看信息

除 os 模块的文件操作,还有一个高级模块 shutil 可以操作文件和目录,这里特别说到其中的两个功能

import shutil
shutil.move('filename','filename') # 移动文件且修改文件名字 同 linux 的 move 指令
shutil.rmtree(path) # 删除目录树,不管是否为空
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值