目录
一、文本文件和二进制文件
二、文件操作相关模块
三、创建文件对象open()
四、文本文件的写入
·基本的文件写入操作
·close()关闭文件流
·write()/writelines()写入数据
五、文本文件的读取
六、enumerate()函数
七、二进制文件的读取和写入
八、文件对象的常用属性和方法
九、使用pickle序列化(记忆移动)
十、CSV文件的操作
·读
·写
十一、os和os.path模块
·os调用操作系统文件和命令
·文件和目录操作
·os.path模块
十二、shutil模块(拷贝和压缩)
十三、zipfile
一、文本文件和二进制文件
按文件中数据组织形式,我们把文件分为文本文件和二进制文件两大类。
1.文本文件
文本文件存储的是普通“字符”文本,默认为unicode字符集,可以使用记事本程序打开。但是,像word软件编辑的文档不是文本文件。
2.二进制文件
二进制文件把数据内容用“字节”进行存储,无法用记事本打开。必须使用专用的软件解码。常见的有:MP4视频文件、MP3音频文件、JPG图片、doc 文档等等。
二、文件操作相关模块
Python标准库中,有着许多文件操作相关的模块。
名称 | 说明 |
io模块 | 文件流的输入和输出操作 input output |
os模块 | 基本操作系统功能,包括文件操作 |
glob模块 | 查找符合特定规则的文件路径名 |
fnmatch模块 | 使用模式来匹配文件路径名 |
fileinput模块 | 处理多个输入文件 |
filecmp模块 | 用于文件的比较 |
csv模块 | 用于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")
打开方式有如下几种:
模式 | 描述 |
r | 读read模式 |
w | 写write模式。如果文件不存在则创建;如果文件存在,则重写新内容 |
a | 追加append模式。如果文件不存在则创建;如果文件存在,则在文件末尾追加内容 |
b | 二进制binary模式(可与其他模式组合使用) |
+ | 读、写模式(可与其他模式组合使用) |
文本文件对象和二进制文件对象的创建:
如果我们没有增加模式“b”,则默认创建的是文本文件对象,处理的基本单元是“字符”。如果是二进制模式“b”,则创建的是二进制文件对象,处理的基本单元是“字节”。
四、文本文件的写入
·基本的文件写入操作
文本文件的写入一般就是三个步骤:
1.创建文件对象
2.写入数据
3.关闭文件对象
f=open("路径","w")
f.write("写入内容")
f.close()
·close()关闭文件流
由于文件底层是由操作系统控制,所以我们打开的文件对象必须显式调用close()方法关闭文件对象。当调用close()方法时,首先会把缓冲区数据写入文件(也可以直接调用flush()方法),再关闭文件,释放文件对象。
为了确保打开的文件对象正常关闭,一般结合异常机制的 finally或者with关键字实现无论何种情况都能关闭打开的文件对象。
·write()/writelines()写入数据
write(a):把字符串a写入到文件中
writelines(b):把字符串列表b写入文件中,不添加换行符
五、文本文件的读取
文件的读取一般使用如下三个方法:
1. read([size])
从文件中读取size个字符,并作为结果返回。如果没有size参数,则读取整个文件读取到文件末尾,会返回空字符串。
2. readline()
读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。
3. readlines()
文本文件中,每一行作为一个字符串存入列表中,返回该列表
#按行读取一个文件
with open("路径","r") as f:
while True:
fragment=f.readline()
if not fragment:
break
else:
print(fragment,end="")
#使用迭代器按行读取
with open("路径","r") as f:
for a in f:
print(a,end="")
六、enumerate()函数
a=["I\n","love\n","you\n"] #1.txt内的内容
with open("1.txt","r") as f:
b = enumerate(f)
print(b)
print(list(b))
'''
结果为:
<enumerate object at 0x000002847EE342C0>
[(0, 'I\n'), (1, 'love\n'), (2, 'you\n')]
'''
七、二进制文件的读取和写入
二进制文件的处理流程和文本文件流程一致。首先还是要创建文件对象,不过,我们需要指定二进制模式,从而创建出二进制文件对象。例如:
f=open(r"d:\a.txt" , 'wb') #可写的、重写模式的二进制文件对象
f=open(r"d:\a.txt" , 'ab') #可写的、追加模式的二进制文件对象
f=open(r"d:\a.txt" , 'rb') #可读的二进制文件对象
创建好二进制文件对象后,仍然可以使用write()、read()实现文件的读写操作。
八、文件对象的常用属性和方法
文件对象是常用属性
属性 | 说明 |
name | 返回文件的名字 |
mode | 返回文件的打开模式 |
closed | 若文件被关闭则返回True |
文件对象的常用方法
方法名 | 说明 |
read([size]) | 从文件中读取size个字节或字符的内容返回。若省略[size],则读取到文件末尾,即一次读取文件所有内容 |
readline() | 从文本文件中读取一行内容 |
readlines() | 把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回 |
write(str) | 将字符串str内容写入文件 |
writelines(s) | 将字符串列表s写入文本文件,不添加换行符 |
seek(offset[,whence]) | 把文件指针移动到新的位置,offset表示相对于whence的位置; offset: whence不同的值代表不同含义: 1:从当前位置开始计算 |
tell() | 返回文件指针的当前位置 |
truncate([size]) | 不论指针在什么位置,只留下指针前size个字节的内容,其余全部删除; 如果没有传入size,则当指针当前位置到文件末尾内容全部删除 |
flush() | 把缓冲区的内容写入文件,但不关闭文件 |
close() | 把缓冲区内容写入文件,同时关闭文件,释放文件对象相关资源 |
九、使用pickle序列化(记忆移动)
Python中,一切皆对象,对象本质上就是一个“存储数据的内存块”。有时候,我们需要将“内存块的数据”保存到硬盘上,或者通过网络传输到其他的计算机上。这时候,就需要“对象的序列化和反序列化”。对象的序列化机制广泛的应用在分布式、并行系统上。
序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。
我们可以使用pickle模块中的函数,实现序列化和反序列操作。
序列化我们使用:
import pickle
pickle.dump(obj, file) #obj就是要被序列化的对象,file指的是存储的文件
pickle.load(file) #从file 读取数据,反序列化成对象
十、CSV文件的操作
CSV是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出。与 Excel文件不同,CSV文件中:
·值没有类型,所有值都是字符串
·不能指定字体颜色等样式
·不能指定单元格的宽高,不能合并单元格
·没有多个工作表
·不能嵌入图像图表
·读
import csv
with open("1.csv","r") as f:
a=csv.reader(f)
print(a)
# print(list(a)) #[['数字1', '数字2', '数字3'], ['1', '2', '3'], ['1', '2', '3'], ['1', '2', '3']]
for i in a: #仅调用一次,在print(list(a))后无法用a
print(i)
'''
结果为:
<_csv.reader object at 0x0000011D5FE46A60>
['数字1', '数字2', '数字3']
['1', '2', '3']
['1', '2', '3']
['1', '2', '3']
'''
·写
import csv
with open("1.csv","w") as f:
a=csv.writer(f)
a.writerow(["数字1","数字2"])
a.writerow([1,2])
b=[[1,2],[1,2]]
a.writerows(b)
'''
写出文件为:
数字1,数字2
1,2
1,2
1,2
'''
十一、os和os.path模块
os模块可以帮助我们直接对操作系统进行操作。我们可以直接调用操作系统的可执行文件、命令,直接操作文件、目录等等。在系统运维的核心基础。
·os调用操作系统文件和命令
#Windows系统下的操作
import os
os.system("notepad.exe")
os.system("ping www.baidu.com")
os.system("cmd")
#直接调用可执行程序
os.startfile(r"C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe")
·文件和目录操作
os常用操作文件方法
方法名 | 描述 |
remove(path) | 删除指定的文件 |
rename(src,dest) | 重命名文件或目录(将src重命名为dest) |
stat(path) | 返回文件的所有属性 |
listdir(path) | 返回path目录下的文件和目录列表 |
os模块下关于目录操作的相关方法
方法名 | 描述 |
mkdir(path) | 创建目录 |
makedirs(path1/path2/path3/...) | 创建多级目录 |
rmdir(path) | 删除目录 |
removedirs(path1/path2...) | 删除多级目录 |
getcwd() | 返回当前工作目录 |
chdir(path) | 把path设为当前工作目录 |
walk() | 遍历目录树 |
sep | 当前操作系统所使用的路径分隔符 |
import os
print(os.name) #Windows为nt Linux和Unix为posix
print(os.sep) #Windows为\ Linux和Unix为/
print(repr(os.linesep)) #Windows为'\r\n' Linux和Unix为'\n'
·os.path模块
os.path模块提供了目录相关(路径判断、路径切分、路径链接、文件夹遍历)的操作
方法 | 描述 |
isabs(path) | 判断path是否为绝对路径 |
isdir(path) | 判断path是否为目录 |
isfile(path) | 判断path是否为文件 |
exists(path) | 判断指定路径的文件是否存在 |
getsize(filename) | 返回文件的大小 |
abspath(path) | 返回绝对路径 |
dirname(p) | 返回目录的路径 |
getctime(filename) | 返回文件的创建时间 |
getatime(filename) | 返回文件的最后访问时间 |
getmtime(filename) | 返回文件的最后修改时间 |
walk(top,func,arg) | 递归方式遍历目录 |
join(path,*paths) | 连接多个path |
split(path) | 对路径进行分隔,以列表形式返回 |
splitext(path) | 从路径中分隔文件的扩展名 |
返回当前工作目录下的后缀为py的文件列表
import os
a=os.getcwd()
print(list(i for i in os.listdir(a) if i.endswith("py")))
十二、shutil模块(拷贝和压缩)
shutil模块是python标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作。
拷贝
import shutil
#shutil.copyfile("1.txt","l_copy.txt")
#shutil. copytree("movie/港台","电影")..#"电影"目录不存在时才能正常拷贝
shutil.copytree("movie/港台","电影" , ignore=shutil.ignore_patterns("*.txt")) #忽略txt文件
压缩
shutil.make archive("电影/gg","zip","movie/港台")
# 压缩后的路径,压缩格式,压缩的内容
十三、zipfile
import zipfile
#压缩
z1=zipfile.ZipFile("d:/a.zip","w") #创建压缩的路径
z1.write("i.txt") #压缩进去的内容
z1.write("l_copy.txt") #压缩进去的内容
z1.close()
#解压缩
z2 = zipfile.ZipFile("d:/a.zip","r") #解压缩的文件
z2.extractall("电影") #解压后的路径
z.close()