python基础-第十天-文件操作(未完待续)

首页 » Python » 正文

1、文本文件和二进制文件

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

(1)文本文件

文本文件存储的是普通“字符”文本,python 默认为 unicode 字符集(两个字节表示一个字符,最多可以表示:65536 个),可以使用记事本程序打开。但是,像 word 软件编辑的文档不是文本文件
(2)二进制文件

二进制文件把数据内容用“字节”进行存储,无法用记事本打开。必须使用专用的软件解码。常见的有:MP4 视频文件、MP3 音频文件、JPG 图片、doc 文档等等。

2、文件操作相关模块概述

Python标准库里,以下是文件操作相关的模块。

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

3、文件对象基本操作

3.1、创建文件对象open()

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

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

为了减少“/”的输入,可以使用原始字符串:r’d:/b.text’的格式

打开方式有如下几种:

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

在对二进制文件进行操作时,要追加‘b’模式,如’rb’,’wb’等等,对文本文件操作时,处理的基本单元是字符,对二进制文件操作时,处理的基本单元是字节。

3.2、文本文件的写入

文本文件的写入一般分为三个步骤:(1)创建文件对象,(2)写入数据,(3)关闭文件对象。

f=open(r'f:/a.txt','a')
s='write something/n nothing'
f.write(s)
f.close()

执行结果,创建了a.txt,并录入了信息

python基础-第十天-文件操作(未完待续)

3.3、常用编码介绍

在操作文本文件时,经常会操作中文,这时候就经常会碰到乱码问题。为了让大家有能力解决中文乱码问题,这里简单介绍一下各种编码之间的关系。

python基础-第十天-文件操作(未完待续)

图里,竖向的编码方式是兼容的,如GB2321与GBK是兼容的,横向之间是不兼容的,如GBK与UTF-8是不兼容的。

Windows操作系统默认的编码是GBK,Linux操作系统默认的编码是UTF-8,当我们使用open()时,调用的是操作系统打开的文件,磨人的编码是GBK。

3.4、write()/writelines()写入数据

write(a),把字符串a写入文件中。

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

f=open(r'f:/b.txt','w',encoding='utf-8')
f.write('python is best/n')
f.write('NO ,java is best/n')
f.writelines(['no,','chinese ','is best'])
f.close()

结果如下:

python基础-第十天-文件操作(未完待续)

3.5、close()关闭文件流

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

为了确保打开的文件对象正常关闭,一般结合异常机制的 finally 或者 with 关键字实现无论何种情况都能关闭打开的文件对象。

try:
    f = open(r"f:/d.txt","a")
    a = "superman bs"
    f.write(a)
except BaseException as e:
    print(e)
finally:
    f.close()

3.6、with语句

with 关键字(上下文管理器)可以自动管理上下文资源,不论什么原因跳出 with 块,都能确保文件正确的关闭,并且可以在代码块执行完毕后自动还原进入该代码块时的现场。

with open(r'f:/c.txt','a',encoding='utf-8') as f :
    f.write("I'm batman")

3.7、文本文件的读取

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

(1)read([size])

从文件中读取size个字符,并作为结果返回,如果没有size参数,则读取整个文件。

读取到文件末尾会返回空字符串。

(2)readline()

读取一行内容作为结果返回,读取到文件末尾,会返回空字符串

(3)readlines()

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

with open(r'f:/b.txt','r',encoding='utf-8') as f:
    a=f.read()
with open(r'f:/b.txt','r',encoding='utf-8') as f:
    b=f.read(4)
with open(r'f:/b.txt','r',encoding='utf-8') as f:
    c=f.readlines()
with open(r'f:/b.txt','r',encoding='utf-8') as f:
    d=[]
    while True:
        rd=f.readline()
        if not rd:
            break
        d.append(rd)
print(a,'/n b ',b,'/n c ',c,'/n d ',d)
****结果如下****
python is best
NO ,java is best
no,chinese is best 
 b  pyth 
 c  ['python is best/n', 'NO ,java is best/n', 'no,chinese is best'] 
 d  ['python is best/n', 'NO ,java is best/n', 'no,chinese is best']

3.8、二进制文件的读取和写入

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

f = open(r"d:/a.txt", 'wb') #可写的、重写模式的二进制文件对象
f = open(r"d:/a.txt", 'ab') #可写的、追加模式的二进制文件对象
f = open(r"d:/a.txt", 'rb') #可读的二进制文件对象
with open(r'f:/123.jpg','rb') as a1:
    with open(r'f:/123_copy.jpg','wb') as a2:
        aa=a1.readlines()
        for i in aa :
            a2.write(i)
print('复制成功')

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

文件对象封装了文件相关的操作。文件对象的属性如下:

属性 说明
name 返回文件的名字
mode 返回文件的打开模式
closed 若文件被关闭则返回 True

打开方式:

模式 说明
r 读模式
w 写模式
a 追加模式
b 二进制模式(可与其他模式组合)
+ 读写模式(可以其他模式组合)

文件对象的常用方法:

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

5、pickle 序列化

序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。我们可以使用 pickle 模块中的函数,实现序列化和反序列操作。

序列化我们使用:

pickle.dump(obj, file) #obj 就是要被序列化的对象,file 指的是存储的文件

pickle.load(file) #从 file 读取数据,反序列化成对象
import pickle
with open(r"f:/data.dat","wb") as f:
    a1 = "DC 海王"
    a2 = 123456
    a3 = ['ab','cd','ef']
    pickle.dump(a1,f)
    pickle.dump(a2, f)
    pickle.dump(a3, f)
with open(r"f:/data.dat","rb") as f:
    a1 = pickle.load(f)
    a2 = pickle.load(f)
    a3 = pickle.load(f)
    print(a1)
    print(a2)
    print(a3)
****结果如下****
DC 海王
123456
['ab', 'cd', 'ef']

6、csv文件的操作

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

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

6.1、csv.reader 对象和 csv 文件读取

import csv 
with open(r'f:/aa.csv','r')as a:
    a_csv = csv.reader(a) #创建 csv 对象,它是一个包含所有数据的列表,每一行为一个元素
    headers = next(a_csv) #获得列表对象,包含标题行的信息
    print(headers)
    for row in a_csv: #循环打印各行内容
        print(row)
****结果如下****
['name', 'power', 'age']
['superman', 'max', '20']
['batman', 'strong', '30']

6.2、csv.writer 对象和 csv 文件写入

import csv 
headers=['name','power','age']
rows=[('superman','max',20),('batman','strong',30)]
with open(r'f:/aa.csv','a') as f :
    f_csv=csv.writer(f)
    f_csv.writerow(headers)
    f_csv.writerows(rows)

7、os模块

7.1、os模块-文件和目录操作

os 模块下常用操作文件的方法:

方法名 描述
remove(path) 删除指定的文件
rename(src,dest) 重命名文件或目录
stat(path) 返回文件的所有属性
listdir(path) 返回path目录下的文件和目录列表

os 模块下关于目录操作的相关方法,汇总如下:

方法名 描述
mkdir(path) 创建目录
makedirs(path1/path2/path3/…) 创建多级目录
rmdir(path) 删除目录
removedirs(path1/path2…) 删除多级目录
getcwd() 返回当前工作目录:current work dir
chdir(path) 把path设为当前工作目录
walk() 遍历目录树
sep 当前操作系统所使用的路径分隔符

7.2、os.path模块

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) 从路径中分割文件的扩展名

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

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

dirpath:要列出指定目录的路径

dirnames:目录下的所有文件夹

filenames:目录下的所有文件

8、shutil 模块(拷贝和压缩)

shutil 模块是 python 标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做 文件和文件夹的压缩、解压缩操作。 os 模块提供了对目录或文件的一般操作。shutil 模块作为补充,提供了移动、复制、压缩、解压等操 作,这些 os 模块都没有提供。

标签:

拜师教育学员文章:作者:1216-皇甫同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《python基础-第十天-文件操作(未完待续)》 发布于2020-08-07

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

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

支付宝扫一扫打赏

微信扫一扫打赏

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

登录

忘记密码 ?

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

Q Q 登 录
微 博 登 录