python——文件操作

1、编码格式

编码格式决定了占据磁盘空间的大小,即同样的文件选择不同的编码格式,内存是不同的。
在这里插入图片描述
在文件的第一行可以用下面的方法选择编码格式

# encoding = gbk
# encoding = UTF-8

更详细的内容请查看B站视频https://www.bilibili.com/video/BV1wD4y1o7AS?p=128

2、文件读写

我们的数据就像水流一样,通过管道流入程序,或者从管道当中流出程序进入磁盘,因此文件读写通常称为“IO操作”(Input Output),读写操作运用到“队列”这种数据结构的特点:先进先出(管道单向,先进去的先流出)
在这里插入图片描述
首先打开a.txt,查看其中的内容

早上好!
今天依然要努力学习啊!

用python程序打开,不过得先确认自己的文件格式,我这里的是UTF-8在这里插入图片描述
读好的文件必须进行关闭file.close(),否则浪费内存,还会使下一次打开文件出现问题。

file = open("a.txt", 'r', encoding='UTF-8')
print(file.readlines())   # 将文件的所有内容读取出来放到列表里
file.close()

'''
['早上好!\n', '今天依然要努力学习啊!\n']
'''

在这里插入图片描述
当时用“a”模式打开时,可以在文件末尾追加内容,当追加的是中文,要将编码格式改为GBK否则出现乱码(下面是运行两次得到的结果)

file = open("a.txt", 'a', encoding='GBK')
file.write('今天学习了嘛?')
file.close()

'''
早上好!
今天依然要努力学习啊!
今天学习了嘛?今天学习了嘛?
'''

3、文件对象的常用方法

在这里插入图片描述

(1)file.realines()读取文件所有的字符,包括换行符,返回列表

file = open("a.txt", 'r', encoding='GBK')
print(file.read())
file.close()
'''
今天依然要努力学习啊!
今天学习了嘛?今天学习了嘛?
'''

(2)file.readline()以换行符为界按行读取

file = open("a.txt", 'r', encoding='GBK')
print(file.readline())
file.close()
'''
早上好!
'''

(3) file.read()不显示"\n",只读取前x个字符,不能识别表情文字

file = open("a.txt", 'r', encoding='GBK')
print(file.read(2))
file.close()
'''
早上
'''

(4)file.tell()返回指针当前位置

file = open("a.txt", 'r')
file.read()
print(file.tell())
file.close()
'''
90
'''

(5)file.seek(x,y)从y位置将文件指针跳过x个字符
.seek(offset[, whence])

  • offset :开始的偏移量,也就是代表需要移动偏移的字节数
  • whence:可不填,默认值为0。表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
file = open("a.txt", 'rb')
file.seek(2, 0)  # 从0开始移动2位

print(file.tell())

file.seek(2, 1)  # 从当前位置开始(即2)移动2位
print('---------')
print(file.tell())
file.close()

'''
2
---------
4
'''

有时候会报错为 io.UnsupportedOperation: can't do nonzero cur-relative seeks因为没有使用b模式(wb、rb)打开的文件,只允许从文件头开始计算相对位置,从其他位置计算时就会引发异常
(6)file.write('\n')将字符串str写入文件、file.writelines(lst)将列表lst写入文件

file = open("a.txt", 'w')
lst = ['Good', ' ', 'morning', '!']
for i in range(6):
    file.writelines(lst)
    file.write('\n')
file.close()
'''
Good morning!
Good morning!
Good morning!
Good morning!
Good morning!
Good morning!
'''

4、with操作

with语句能自动管理上下文资源,不管因为什么原跳出with模块,都能确保文件正常关闭,以达到释放资源的目的。所以打开文件时建议使用with操作。

一个类对象实现了__enter __()__exit__()两种方法,称该类对象遵守上下文管理器协议,这个类对象的实例对象称为上下文管理器

在这里插入图片描述
用二进制方式打开图片并复制一份

with open('husky_little.jpg', 'rb') as source_file:
    with open('copy_husky.jpg', 'wb') as copy_file:
        copy_file.write(source_file.read())
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值