Python基础篇——Day10

文件操作(IO技术)

文本文件和二进制文件

Python默认的编码方式为Unicode编码,两个字节表示一个字符,最多可表示65536个

  1. 文本文件
    文本文件存储的是普通的“字符”文本,可以用记事本程序打开,像word文档不是文本文件
  2. 二进制文件
    二进制文本把数据内容用“字节”存储,无法使用记事本打开,必须使用专门的软件解码,常见的有MP4,MP3音频,JPG图片,doc文档等

文件操作模块

Python标准库提供了文件操作的相关模块,常见的模块如下:

名称说明
io模块文件流的输入和输出
os模块基本操作系统功能,包括文件操作
glob模块查找符合特定规则的文件路径名
fnmatch模块使用模式来匹配文件路径名
fileinput模块处理多个输入文件
filecmp模块用于文件的比较
csv模块用于csv文件处理
pickle和cpickle用于序列化和反序列化
xml包用于XML数据处理

创建文件对象open()

open()语法:

open(文件名[,打开方式])

打开方式:

模块描述
r读模式
w写模式,如果文件不存在则创建,若存在则重写新内容
a追加模式,如果文件不存在则创建,若存在则在末尾追加新内容
b二进制模式(可与其它模式组合使用)
+读、写模式(可与其它模式组合使用)

文本文件和二进制文件对象的创建:
如果没有二进制模式"b",则默认创建的是文本文件对象,处理的基本单元是字符,若有二进制"b",则创建的是二进制文件对象,处理的基本单元是字节

文本文件的写入

步骤:

  1. 创建对象
  2. 写入数据
  3. 关闭对象

操作示例:

'''
文本文件写入演示
'''
f=open(r"E:\a.txt","a")  # 解释器调用操作系统进行编码,windows系统默认GBK编码,linux系统默认UTF-8编码
s="kkk"
f.write(s)
f.close()

为什么要有关闭操作:
执行Python程序需要通过解释器,解释器在操作系统上运行,而操作系统才是直接与硬盘进行互动的,也就是说Python程序想对硬盘进行操作,需要通过解释器调用操作系统的资源,进而操作硬盘,故在程序执行完后,需要通过close()方法来关闭由操作系统打开的相关资源

close()关闭文件流

由于文件底层是由操作系统控制的,所以我们打开的文件对象必须显式地调用close()方法关闭文件对象,当调用close()方法时,会首先把数据由缓冲区写入文件(也可以用flush()方法实现,但不关闭文件),再关闭文件,释放文件对象

为了确保打开的文件对象都能正常关闭,一般结合异常控制finally语句或with语句实现“无论何种情况均能关闭文件对象”的操作

文本文件的读写

读取:

  1. read(size)
    从文件中读取size个字符,并作为结果返回,若没有参数则会读取整个文件,读到文件末尾,会返回空字符串
  2. readline()
    读取每一行内容作为结果返回,读到文件末尾,则会返回一个空字符串
  3. readlines()
    文本文件中,每一行作为一个字符串存入列表中,返回该列表

写入:

  1. write(a)
    把字符串a写入到文件中
  2. writelines(b)
    把字符串列表写入到文件中,不添加换行符(所以要换行的话需要在字符串列表中添加换行符)

二进制文件的读写

二进制文件的处理流程和文本文件一致,首先还是要创建文件对象,但是需要指定二进制模式,从而创建出二进制文件对象,如:

  1. f=open(path,‘wb’)
    可写的、重写模式的二进制文件对象
  2. f=open(path,‘ab’)
    可写的,追加模式的二进制文件对象
  3. f=open(path,‘rb’)
    可读的二进制文件对象

创建好二进制文件后,仍可以使用write(),read()等方法实现文件的相关读写操作

操作示例:

'''
读取图片文件,实现文件的拷贝
'''
with open("aa.gif","rb") as f:
	with open("aa_copy.gif","wb") as w:
		for line in f.readlines():
			w.write(line)
print("done!")

seek()任意位置操作

seek语法:

seek(offset[,whence])
'''
把文件指针移动到新的位置,offset表示相对于whence的
多少个字节的偏移量,请注意是字节哦

offset:
为正:往结束方向移动
为负:往开始方向移动

whence:
为0:从文件头(0位)开始计算(默认值)
为1:从当前位置开始计算
为2:从文件尾开始计算
'''

操作示例:

'''
已知文本文件如下:
1#1
2#2
3#3
'''
with open(r"E:\a.txt","r",encoding="utf-8") as f:
	print("name is:",f.name) # 告诉我文件名
	print(f.tell()) # 告诉我当前指针的位置
	print(f.readline())
	print(f.tell()) # 再次告诉我指针位置
	f.seek(1) # 相对于文件头的偏移量
	print(str(f.readline()))

'''
结果为:
name is: E:\a.txt
0
1#1

5
1
#1

'''

pickle序列化

Python中一切都是对象,对象本质是“存储数据的内存块”,当我们需要将“内存块的数据”保存到硬盘上时,或者通过网络传输到其它计算机上时,我们就需要用到“对象的序列化和反序列化”。

序列化:

将对象转化为“串行化”的数据形式,存储到硬盘或者通过网络传输到其他地方。

反序列化

将读取的“串行化”数据转化为对象

序列化使用:

pickle.dump(obj,file)  # obj是要被序列化的对象,file是指存储的文件
pickle.load(file) # 从file中读取数据,反序列化成对象

操作示例:

'''
将对象序列化到文件中
'''
import pickle
with open(r"E:\b.dat","wb") as f:
	a1="four"
	a2="five"
	
	pickle.dump(a1,f)
	pickle.dump(a2,f)

'''
返序列化读取文件中的数据
'''
with open(r"E:\b.dat","rb") as f:
	a1=pickle.load(f)
	a2=pickle.loaf(f)
	
	print(a1)
	print(a2)

four
five	

csv文件的操作

csv(Comma Separated Values)是逗号分隔符文本格式,常用于数据交换,Excel文件和数据库数据的导入导出,与Excel不同,csv文件:

  1. 值没有类型,所有值均为字符串
  2. 不能指定字体颜色等样式
  3. 不能指定单元格宽高,不能合并单元格
  4. 没有多个工作表
  5. 不能插入图像图表

操作示例:

'''
测试csv文件的读取写入
'''
import csv
with open(r"E:\dd.csv","w") as f:
	b=csv.writer(f)
	b.writerow(["ID","NAME","AGE"])
	b.writerow(["1001","Tom",18])
	b.writerow(["1002","Jack",19])
	
	'''
	或者定义一个大列表
	c=[["ID","NAME","AGE"],["1001","Tom",18],["1002","Jack",19]]
	b.writerows(c)
	'''

with open(r"E:\dd.csv","r") as f:
	a=csv.reader(f)
	for row in a:
		print(row)

os模块

常用操作文件的方法

方法描述
remove(path)删除指定文件
rename(src,dest)重命名文件或目录
stat(path)返回文件的所有属性
listdir(path)返回path目录下的文件和目录列表
mkdir(path)创建目录
makedirs(path1/path2/path3/…)创建多级目录
rmdir(path)删除目录
removedirs(path1/path2/…)删除多级目录 ,只能删除空目录
getcwd()获取当前工作目录
chdir(path)把path设置为当前目录
walk()遍历目录树
sep获取当前操作系统所使用的路径分隔符

walk()递归遍历所有文件和目录

os.walk()方法
返回一个3个元素的元组(dirpath,dirnames,filenames)

  1. dirpath:指定目录的路径
  2. dirnames:该目录下的所有文件夹
  3. filenames:该目录下的所有文件

os.path模块

常用方法:

方法描述
isabs(path)判断path是否为绝对路径
isdir(path)判断path是否为目录
isfile(path)判断path是否为文件
exists(path)判断指定路径的文件是否存在
getsize(filename)返回文件的大小
abspath(path)返回绝对路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值