文件操作相关模块概述
名称 | 说明 |
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","a)
打开方式有如下几种
模式 | 描述 |
r | 读read模式 |
w | 写write模式。如果文件不存在则创建:如果文件存在,则重写新内容: |
a | 追加append 模式。如果文件不存在则创建;如果文件存在,则在文件末尾追加内容 |
b | 二进制binary模式(可与其他模式组合使用) |
+ | 读、写模式(可与其他模式组合使用) |
基本文件的写入
文本文件的写入一般就是三个步骤:
1.创建文件对象
2.写入数据
3.关闭文件对象
#文本写入简单测试
f = open("d:\a.txt","a")
a = "i love you"
f.write(a)
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()关闭文件流
由于文件底层是由操作系统控制,所以我们打开的文件对象必须显式调用close()方法关闭文件对象。当调用close()方法时,首先会把缓冲区数据写入文件(也可以直接调用flush()方法),再关闭文件,释放文件对象。
为了确保打开的文件对象正常关闭,一般结合异常机制的finally或者with关键字实现无论何种情况都能关闭打开的文件对象。
文本文件的读取
文件的读取一般使用如下三个方法:
1. read([size])
从文件中读取size个字符,并作为结果返回。如果没有size参数,则读取整个文件。读取到文件末尾,会返回空字符串。
2. readline()
读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。
3. readlines()
文本文件中,每一行作为-一个字符串存入列表中,返回该列表
#测试文件读取
with open(r"a.txt","r",encoding="utf-8") as f:
str = f.read(3)
print(str)
#测试按行读取文本
with open(r"a.txt","r",encoding="utf-8") as f:
for a in f:
print(a,end="")
pickle序列化
序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。我们可以使用pickle模块中的函数,实现序列化和反序列操作。
import pickle
a1 = "jack"
a2 = 123
a3 = [1,2,3,4]
with open("data.dat","wb") as f:
pickle.dump(a1,f)
pickle.dump(a2,f)
pickle.dump(a3,f)
with open("date.dat","rb") as f:
b1 = pickle.load(f); b2 = pickle.load(f);b3 = pickle.load(f)
print(b1);print(b2);print(b3)
print(id(a1));print(id(b1))
CSV文件读取
csv(Comma Separated Values)是逗号分隔符文本格式,常用于数据交换、Excel 文件和数据库数据的导入和导出。与Excel文件不同,CSV 文件中:
值没有类型, 所有值都是字符串;不能指定字体颜色等样式;不能指定单元格的宽高,不能合并单元格;没有多个工作表;不能嵌入图像图表
#测试csv文件的读取和写入
import csv
with open("c.csv","r") as f:
a_csv = csv.reader(f)
#print(list(a_csv))
for row in a_csv:
print(row)
with open("d.csv","w") as f :
b_csv =csv.writer(f)
b_csv.writerow(["name","job","age"])
模块
os模块
os模块可以帮助我们直接对操作系统进行操作。我们可以直接调用操作系统的可执行文件、命令,直接操作文件、目录等等。在系统运维的核心基础。
[示例] os.system调用windows系统的记事本程序
import os
os. system (" notepad. exe" )
[示例] os.system 调用windows系统中ping命令
import os
os. system(" ping www. baidu. com")
os模块-文件和目录操作
方法名 | 描述 |
remove(path) | 删除指定的文件 |
rename(src,dest) | 重命名文件或目录 |
stat(path) | 返回文件的所有属性 |
listdir(path) | 返回path目录下的文件和目录列表 |
方法名 | 描述 |
mkdir(path) | 创建目录 |
makedirs(path1/path2/pat.3...) | 创建多级目录 |
rmdir(path) | 删除目录 |
removedirs(path1/pah...). | 删除多级目录 |
getcwd() | 返回当前工作目录: current work dir |
chdir(path) | 把path设为当前工作目录 |
walk() | 遍历目录树 |
sep | 当前操作系统所使用的路径分隔符 |
os.path模块
方法 | 描述 |
isabs(path) | 判断path是否绝对路径 |
isdir(path) | 判断path是否为目录 |
isfile(path) | 判断path是否为文件 |
exists(path) | 判断指定路径的文件是否存在 |
getsize(filename) | 返回文件的大小 |
abspath(path) | 返回绝对路径 |
dirname(p) | 返回目录的路径 |
getatime(filename) | 返回文件的最后访问时间 |
getmtime(filename) | 返回文件的最后修改时间 |
walk(top,func,arg) | 递归方式遍历目录 |
join(path,* paths) | 连接多个path |
split(path) | 对路径进行分割,以列表形式返回 |
splitext(path) | 从路径中分割文件的扩展名 |
shutil模块
shutil模块是python标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等:还可以做文件和文件夹的压缩、解压缩操作
zipfile模块
z1 = zipfile. ZipFile(" 'd:/a. zip","w")
z1. write("1. txt")
z1. write("1_ copy. txt' )
z1. close0