Python基础知识_第10节_文件操作(IO技术)

1389-李同学

发表文章数:35

热门标签

,
首页 » Python » 正文

文件操作(IO技术)

文本文件和二进制文件

  • 文本文件:存储字符的文件,python默认为unicode解码,可以用记事本打开的文件。word文档不算纯文本文件,因为里面也可以放图片。
  • 二进制文件:无法用记事本打开,必须用专用的软件解码。常见的有MP4视频文件、MP3 音频文件、JPG 图片、doc 文档等等。

文件操作相关模块概述

名称 说明
io模块 文件流的输入和输出操作 input output
os 模块 基本操作系统功能,包括文件操作
glob模块 查找符合特定规则的文件路径名
fnmatch模块 使用模式来匹配文件路径名
fileinput 模块 处理多个输入文件
filecmp模块 用于文件的比较
cvs模块 用于 csv文件处理
pickle 和 cPickle 用于序列化和反序列化
xml包 用于 XML数据处理
bz2、gzip、 zipfile、 zlib、 tarfile 用于处理压缩和解压缩文件(分别对应不同的算法)

创建文件对象open()

  • open(文件名,打开方式)
  • 为了减少“/”的输入,可以使用原始字符串 r “文件名”
    • f = open(r"d:/b.txt",“w”)
模式 描述
r 读read模式
w 写write模式。如果文件不存在则创建;如果文件存在,则重写新内容;
a 追加append模式。如果文件不存在则创建;如果文件存在,则在文件末尾追加内容
b 二进制binary模式(可与其他模式组合使用)
+ 读、写模式(可与其他模式组合使用)

文本文件的写入

基本的文件写入操作

  • 步骤
    1. 创建文件对象
    2. 写入数据
    3. 关闭文件对象
f = open(r"a.txt","a") 
s = "itbaizhan/nsxt/n" 
f.write(s) 
f.close()	# 一定要关闭文档

常用编码介绍

  • 常用UTF-8。
  • GB2312、GBK、GB8030都是中文解码。
    Python基础知识_第10节_文件操作(IO技术)

中文乱码问题

  • Windows操作系统默认编码时GBK,Linux操作系统默认的编码时UTF-8。
  • Python默认编码为Unicode。
  • 可以设置encoding为utf-8来使python在通过操作系统os来写入文件时,使用utf-8解码。
f = open(r"b.txt","w",encoding="utf-8")
f.write("尚学堂/n百战程序员/n")
f.close()

write()/writelines()写入数据

  • write(a):把字符串a写入到文件中
  • writelines(b):把字符串列表写入文件中,需要自己添加换行符。
f = open(r"d:/bb.txt","w",encoding="utf-8") 
s = ["高淇/n","高老三/n","高老四/n"] 
f.writelines(s) 
f.close()

# 高淇
# 高老三
# 高老四

close()关闭文件流

  • 必须要关闭文件对象。
  • 可以结合异常机制finally确保关闭文件对象。
  • 当调用close()方法时,首先会把缓冲区数据写入文件(也可以直接调用flush()方法),再关闭文件,释放文件对象。
try:
	f = open(r"my01.txt","a")
	str = "gaoqi"
	f.write(str)
except BaseException as e:
	print(e)
finally:
	f.close()

with语句(上下文管理器)

  • with自动帮忙还原。通常会使用with语句来读取文件。
s = ["高淇/n","高老三/n","高老五/n"] 
with open(r"d:/bb.txt","w") as 
	f: f.writelines(s)

文本文件的读取

  • read(size):从文件中读取size个字符,并作为结果返回。如果没有size参数,则读取整个文件。读取到文件末尾,会返回空字符串。

  • readline():读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。

  • readlines():文本文件中,每一行作为一个字符串存入列表中,返回该列表。

  • 按行读取一个文件

# 用Readline方式。
with open(r"bb.txt","r") as f:
	while True:
		fragment = f.readline()
		if fragment:	# 如果读出来的行为空,则break
			break
		else:
			print(fragment,end="")
# 使用迭代器(每次返回一行)读取文本文件,更推荐使用。
with open(r"d:/bb.txt","r") as f: 	
	for a in f: 
		print(a,end="")

使用enumerate()函数和推导式生成列表操作每行增加行号

  • string.rstrip()去空白符
# 比较有意思,为文本文件每一行的末尾增加行号。
为文本文件每一行的末尾增加行号
with open("e.txt","r",encoding="utf-8") as f:
	lines = f.readlines()
	lines = [ line.rstrip()+" #"+str(index+1)+"/n" for index,line in enumerate(lines)]	# enumerate推导式生成列表
												# rstrip()去空白符
with open("e.txt","w",encoding="utf-8") as f:
	f.writelines(lines)

二进制文件的读取和写入(图片文件拷贝)

  • 需要在模式加入“b”:
    1. f = open(r"d:/a.txt", ‘wb’) #可写的、重写模式的二进制文件对象
    2. f = open(r"d:/a.txt", ‘ab’) #可写的、追加模式的二进制文件对象
    3. f = open(r"d:/a.txt", ‘rb’) #可读的二进制文件对象
# 读取图片文件,实现文件的拷贝
with open('aa.gif', 'rb') as f:
	with open('aa_copy.gif', 'wb') as w:
		for line in f.readlines():
			w.write(line)
print('图片拷贝完成!')

文件对象的常用方法

方法名 说明
read([size]) 从文件中读取size 个字节或字符的内容返回。若省略[size],则读取到文件末尾,即一次读取文件所有内容
readline() 从文本文件中读取一行内容
readlines() 把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
write(str) 将字符串 str内容写入文件
writelines(s) 将字符串列表 s 写入文件文件,不添加换行符
seek(offset, whence) 把文件指针移动到新的位置,offset表示相对于whence的多少个字节的偏移量;offset:为正往结束方向移动,为负往开始方向移动。whence:0: 从文件头(默认值)1:从当前位置 2:从文件尾
tell() 返回文件指针的当前位置
truncate([size]) 只留下指针前 size 个字节的内容,其余全部删除。如果没有传入 size,则当指针当前位置到文件末尾内容全部删除
flush() 把缓冲区的内容写入文件,但不关闭文件
close() 把缓冲区内容写入文件,同时关闭文件,释放文件对象相关资源

文件任意位置操作(seek()移动文件指针)

# seek()移动文件指针示例
with open("e.txt","r",encoding="utf-8") as f:
	print("文件名是:{0}".format(f.name))
	print(f.tell())	# 打印指针位置
	print("读取的内容:{0}".format(str(f.readline())))
	print(f.tell())
	f.seek(0)	# 指针移动到文件头
	print("读取的内容:{0}".format(str(f.readline())))

# 文件名时:e.txt
# 0
# 读取的内容:我love u! #1
#
# 15
# 读取的内容:尚学堂 #2
#

使用pickle序列化

未经允许不得转载:作者:1389-李同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《Python基础知识_第10节_文件操作(IO技术)》 发布于2020-11-09

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录