Python基础10

Python基础10

  • 文件操作
    • 文本文件和二进制文件
    • 文件操作相关模块概述
    • 创建文件对象open()
    • 文本文件的写入
    • write()/writelines()写入数据
    • close()关闭文件流
    • with语句(上下文管理器)
    • 文本文件的读取
    • 二进制文件的读取和写入
    • 文件对象的常用属性和方法
    • 使用pickle序列化
    • CSV文件的操作
    • os.path模块

文件操作

文本文件和二进制文件

按文件中数据组织形式,我们把文件分为文本文件和二进制文件两大类。

  1. 文本文件
    文本文件存储的是普通“字符”文本,python默认为 unicode 字符集(两个字节表示
    一个字符,最多可以表示:65536 个),可以使用记事本程序打开。但是,像 word 软件
    编辑的文档不是文本文件。
  2. 二进制文件
    二进制文件把数据内容用“字节”进行存储,无法用记事本打开。必须使用专用的软件
    解码。常见的有:MP4视频文件、MP3 音频文件、JPG 图片、doc 文档等等。

文件操作相关模块概述

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

创建文件对象open()

open()函数用于创建文件对象,基本语法格式如下:

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

如果只是文件名,代表在当前目录下的文件。文件名可以录入全路径,比如:D:\a\b.txt。
为了减少“\”的输入,可以使用原始字符串:r“d:\b.txt”。示例如下:

f = open(r"d:\b.txt","w")

Python基础10_第1张图片

文本文件对象和二进制文件对象的创建:
如果我们没有增加模式“b”,则默认创建的是文本文件对象,处理的基本单元是“字
符”。如果是二进制模式“b”,则创建的是二进制文件对象,处理的基本单元是“字节”。

文本文件的写入

基本的文件写入操作
文本文件的写入一般就是三个步骤:

  1. 创建文件对象
  2. 写入数据
  3. 关闭文件对象
    我们首先创建一个小程序,体验一下文本文件的写入操作。

中文乱码问题
windows 操作系统默认的编码是 GBK,Linux操作系统默认的编码是 UTF-8。当用open()时,调用的是操作系统打开的文件,默认的编码是 GBK。

#通过指定文件编码解决中文乱码问题
f = open(r"b.txt","w",encoding="utf-8")
f.write("123456")
f.close()

write()/writelines()写入数据

write(a):把字符串a写入到文件中
writelines(b):把字符串列表写入文件中,不添加换行符

close()关闭文件流

由于文件底层是由操作系统控制,所以我们打开的文件对象必须显式调用close()方法
关闭文件对象。当调用close()方法时,首先会把缓冲区数据写入文件(也可以直接调用flush()
方法),再关闭文件,释放文件对象。为了确保打开的文件对象正常关闭,一般结合异常机制的 finally或者with 关键字实现无论何种情况都能关闭打开的文件对象。

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)

文本文件的读取

文件的读取一般使用如下三个方法:

  1. read(size)
    从文件中读取 size 个字符,并作为结果返回。如果没有 size 参数,则读取整个文件。
    读取到文件末尾,会返回空字符串。
  2. readline()
    读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。
  3. readlines()
    文本文件中,每一行作为一个字符串存入列表中,返回该列表
#读取一个文件前4个字符
with open(r"bb","r",encoding="utf-8") as f:
	print(f.read(4))

#文件较小,一次将文件内容读入到程序中
with open(r"d:\bb.txt","r") as f: 
	print(f.read())
	
#按行读取一个文件
with open(r"bb.txt","	
with open(r"bb.txt","r") as f:
	while True:
		fragment = f.readline()
		if not fragment:
			break
		else:
			print(fragment,end="")

#使用迭代器(每次返回一行)读取文本文件	
with open(r"d:\bb.txt","r") as f: 
	for a in f: 
		print(a,end="")

二进制文件的读取和写入

二进制文件的处理流程和文本文件流程一致。首先还是要创建文件对象.需要指
定二进制模式,创建出二进制文件对象。例如:
f = open(r"d:\a.txt", ‘wb’) #可写的、重写模式的二进制文件对象
f = open(r"d:\a.txt", ‘ab’) #可写的、追加模式的二进制文件对象
f = open(r"d:\a.txt", ‘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('图片拷贝完成')

文件对象的常用属性和方法

Python基础10_第2张图片Python基础10_第3张图片

使用pickle序列化

Python中,一切皆对象,对象本质上就是一个“存储数据的内存块”。有时候,我们需要将“内存块的数据”保存到硬盘上,或者通过网络传输到其他的计算机上。这时候,就需要“对象的序列化和反序列化”。 对象的序列化机制广泛的应用在分布式、并行系统上。序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。
我们可以使用 pickle 模块中的函数,实现序列化和反序列操作。
序列化和反序列化使用:
pickle.dump(obj, file) obj 就是要被序列化的对象,file 指的是存储的文件
pickle.load(file) 从file 读取数据,反序列化成对象

import pickle with open(r"d:\data.dat","wb") as f:
	a1 = "高淇" 
	a2 = 234 
	a3 = [20,30,40]
	pickle.dump(a1,f) 
	pickle.dump(a2, f) 
	pickle.dump(a3, f)
#将获得的数据反序列化成对象
import pickle with open(r"d:\data.dat","rb") as f: 
	a1 = pickle.load(f) 
	a2 = pickle.load(f) 
	a3 = pickle.load(f) 
	print(a1) 
	print(a2) 
	print(a3)
运行结果:
高淇
234
[20, 30, 40]

CSV文件的操作

csv是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出。与Excel 文件不同,
CSV 文件中:

  1. 值没有类型,所有值都是字符串
  2. 不能指定字体颜色等样式
  3. 不能指定单元格的宽高,不能合并单元格
  4. 没有多个工作表
  5. 不能嵌入图像图表
    Python标准库的模块 csv提供了读取和写入 csv格式文件的对象。

csv.reader对象和csv文件读取

csv.reader对象于从csv文件读取数据
import csv 
with open(r"d:\a.csv") as a: 
	a_csv = csv.reader(a)
	# 创 建 c s v 对 象,它 是 一 个 包 含 所 有 数 据 的 列 表 , 每 一 行 为 一 个 元 素
	headers = next(a_csv)
	# 获 得 列 表 对 象 , 包 含 标 题 行 的 信 息
	print(headers) 
	for row in a_csv:
		# 循 环 打 印 各 行 内 容
		print(row)

csv.writer对象和csv文件写入

import csv
headers = ["工号","姓名","年龄","地址","月薪"] 
rows = [("1001","高淇",18,"西三旗1号院","50000"),("1002","高八",19,"西三旗1号院","30000")]
with open(r"d:\b.csv","w") as b: 
	b_csv = csv.writer(b) # 创 建 c s v 对 象 
	b_csv.writerow(headers) # 写 入 一 行 ( 标 题 ) 
	b_csv.writerows(rows) # 写 入 多 行 ( 数 据 )

os.path模块

os.path模块提供了目录相关(路径判断、路径切分、路径连接、文件夹遍历)的操作
Python基础10_第4张图片Python基础10_第5张图片

# 测 试 o s.p a t h 常 用 方 法
import os
import os.path
print(os.path.isabs("d:/a.txt"))# 是 否 绝 对 路 径
print(os.path.isdir("d:/a.txt"))# 是 否 目 录
print(os.path.isfile("d:/a.txt"))# 是 否 文 件
print(os.path.exists("a.txt"))# 文 件 是 否 存 在
print(os.path.getsize("a.txt"))# 文 件 大 小
print(os.path.abspath("a.txt"))# 输 出 绝 对 路 径
print(os.path.dirname("d:/a.txt"))# 输 出 所 在 目 录
print(os.path.getctime("a.txt"))# 返 回 创 建 时 间
print(os.path.getatime("a.txt"))# 返 回 最 后 访 问 时 间
print(os.path.getmtime("a.txt"))# 返 回 最 后 修 改 时 间
path = os.path.abspath("a.txt")# 返 回 绝 对 路 径
print(os.path.split(path))# 返 回 元 组 : 目 录 、 文 件
print(os.path.splitext(path))# 返 回 元 组 : 路 径 、 扩 展 名
print(os.path.join("aa","bb","cc"))# 返 回 路 径 : a a / b b / c c

你可能感兴趣的:(笔记,python)