栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 文件操作

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 文件操作

文章目录
    • 简介
    • 基础
      • 文件操作的三个要素
      • 文件操作模式
    • 读文件
      • 使用相对路径或者是绝对路径打开并读取
      • 使用绝对路径,按照字符读取
      • 按行读取
      • 多行读取
      • for循环读取文件
    • 写文件
      • 文件不存在,创建并写入
      • 文件存在,清空原有内容再写入信息
    • 在文件中追加内容
    • 读写先后问题
    • 光标获取
      • tell获取光标
      • seek,寻找,调整光标

简介

文件的读写俗称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_testa.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()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947868.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号