Python 文件操作

简介

文件的读写俗称IO操作,其流程可以简单概括为:Python操作文件–>打开或新建文件–>读、写文件–>关闭资源。

基础

文件操作的三个要素

如果需要使用Python操作文件需要满足以下几个条件:
文件名:通过绝对路径与相对路径获取文件名
文件打开方式:例如读取、写入、追加内容
编码方式:需要确定文件的编码方式,这样可以确保在写入或读取时不会变成乱码。
下面是几个常见的操作系统中默认的编码方式:

操作系统默认编码编码
Windowsgbk
Linuxutf-8
Macutf-8

文件操作模式

对文件的操作又称之为对文件句柄的操作,在Python中,文件操作模式有以下几种:

文件操作模式说明
r以只读的形式打开文件,默认就是r模式
w以只写的形式打开这个文件,如果这个文件存在就覆盖这个文件内容来写(先删除原内容在写),不存在就创建文件
a在文件后面追加内容,文件不存在创建文件
rb以只读的形式打开一个二进制文件
wb以只写的形式打开一个二进制文件,如果这个文件存在就覆盖这个文件来写东西(先删除原内容在写),否则创建文件
ab在一个二进制文件后面追加内容 ,文件不存在创建文件
r+以读写的形式打开一个文件,如果这个文件不存在会报错
w+以读写的形式打开一个文件,如果这个文件存在就覆盖这个文件内容来写(先删除原内容),不存在就创建文件
a+以读写的形式打开文件可以在文件后面追加内容,文件不存在就创建
rb+以读写的形式打开一个二进制文件,不存在就报错
wb+以读写的形式打开一个二进制文件,如果这个文件存在就覆盖这个文件内容来写(先删除原内容在写),不存在就创建文件
ab+以读写的形式打开二进制文件可以在文件后面追加内容

读文件

使用相对路径或者是绝对路径打开并读取

在本例中以a.txt的《再别康桥》为例,本例使用的是相对路径读取:

f=open('a.txt',encoding='utf-8',mode='r')#打开a.txt,指定编码和操作模式
f1=f.read()#读取文件
print(f1)
f.close()#读取完之后关闭文件

读取后的结果如下:
在这里插入图片描述

使用绝对路径,按照字符读取

实例如下:

f=open(r'D:\model_test\a.txt',encoding='utf-8',mode='r')#打开a.txt,指定编码和操作模式
f1=f.read(15)#读取文件
print(f1)
f.close()#读取完之后关闭文件

在这里插入图片描述

按行读取

实例如下所示:

f = open('a.txt',encoding='utf-8',mode='r')#打开a.txt,指定编码和操作模式
f1 = f.readline()#readline每次读取一行
print(f1)
f1 = f.readline()
print(f1)
f.close()#读取完之后关闭文件

在这里插入图片描述

多行读取

使用readlines可以很方便的多行读取数据,它会返回一个列表,每一个元素就是源文件的每一行。多行读取实例如下:

f = open('a.txt',encoding='utf-8',mode='r')#打开a.txt,指定编码和操作模式
f1=f.readlines()#readlines返回一个列表,列表的每一个元素是原文件的每一行
print(f1)
f.close()#读取完之后关闭文件

部分运行结果如下所示:
在这里插入图片描述

for循环读取文件

我们也可以使用for循环读取文件获得其中的数据:

f = open('a.txt',encoding='utf-8',mode='r')#打开a.txt,指定编码和操作模式
for i in f:
    print(i)#在循环之中可以设置读取方式
f.close()#读取完之后关闭文件

在这里插入图片描述

写文件

文件中有四种写文件的模式,具体可见本文中表一。
下面就以下写入方式进行简单的实例练习:

文件不存在,创建并写入

f = open('b.txt',encoding='utf-8',mode='w')#打开a.txt,指定编码和操作模式
f1=f.write('智慧建筑,数字未来!中亿丰数字,城市数智化专家')
print(f1)
f.close()#读取完之后关闭文件

在这里插入图片描述

文件存在,清空原有内容再写入信息

代码与上例相同,仅需修改f.write之中的内容,如下所示:

f.write('中亿丰数字,城市数智化专家')

此时b.txt中,内容如下:
在这里插入图片描述

在文件中追加内容

文件的追加:a,ab,a+,ab+
下面以几个简单实例来演示:
此时b.txt中的内容:
在这里插入图片描述
输入以下代码:

f = open('b.txt',encoding='utf-8',mode='a')#打开a.txt,指定编码和操作模式
f1=f.write('。智慧建筑,数字未来')
print(f1)
f.close()#读取完之后关闭文件

运行结果如下所示:
在这里插入图片描述

读写先后问题

r+先读取再写入,倘若文件不存在,系统会返回错误值,如果在后面追加内容,那么运行不会产生问题。但如果先写入再读取,那么就会出现一些问题。
光标从前往后先写再读取,那么写多少就会覆盖多少,但是极有可能会出现乱码问题。
先读取再写入:

f=open('b.txt',encoding='utf-8',mode='r+')
f1=f.read()
#光标在哪里,就在那增加,因为你刚读取完毕所有,光标在最后面,所以就会在后面增加
print(f1)#举头望明月
f.write('智慧建筑,数字未来')
f.close()

在这里插入图片描述
先写入再读取:

f=open('b.txt',encoding='utf-8',mode='r+')
f.write('12智慧建筑,数字未来')
f1=f.read()
print(f1)
f.close()

在这里插入图片描述
可以看到文件中不仅覆盖了前文,而且出现了乱码
这是因为,一个文字在utf-8是3字节,换数字,一个数字1字节,1字节对应3字节,无法对应,就出错,甚至于其他符号;因为你写的时候是一个字符替换一个字符而不是替换一个编码。

光标获取

tell获取光标

tell():获取光标的位置,以字节为单位光标的位置跟读取的位置息息相关,与用户在运行代码前鼠标放置的位置没有关系。

f=open('b.txt',encoding='utf-8',)
print(f.tell())#tell根据字节获取光标,此时没有读取,光标的位置在0的位置,
f1=f.read(3)#读取三个字符中文之后,光标的位置就成了9,在utf-8中,一个中文3字节
print(f.tell())#此时光标的位置是9
f.close()

在这里插入图片描述

seek,寻找,调整光标

起始位置参数说明
0光标在文件起始位置
1光标在当前位置
2光标在文件最后一个位置

下面是简单实例,在b.txt中,文件内容为:中亿丰数字,城市数智化专家。,下面是光标偏移后内容打印出来的效果变化:

f=open('b.txt',encoding='utf-8')
f.seek(0)#从第几个字节的光标开始往后,0就是从头开始,就是偏移量
print(f.read())#中亿丰数字,城市数智化专家。
f.seek(3)#偏移3字节
print(f.read())#亿丰数字,城市数智化专家。
f.close()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中亿丰数字科技集团有限公司

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值