Python3对文件的操作

本文介绍了Python3中文件操作的基本知识,包括打开模式、读取、写入、文件指针和缓冲等内容。在Python3中,字符串分为bytes和str类型,文件操作时需要注意二进制模式。使用迭代器能有效处理大文件,而文件指针的移动通过seek()函数实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:不知道大家中秋小假过得怎样?反正我是在寝室睡了3天,其间爬下床看了点python3对文件操作的相关知识。还是有很多收获的,总结一下。
番外:在了解python3对文件的操作之前,先要了解python3.x和python2.x的区别。我主要介绍下编码的区别。
因为本人纯菜鸟,在此之前,也要对编码有了点基本的了解。
计算机中,目前用的最广泛,也是最基本的,算是ASCII字符编码了。1.ASCII就是我们最常见的,26个英文字母,加上常见的那些字符等等,加起来的,字符编码;
2.而我们常见的GBK(XXX)类型字符编码,就是简体中文字符编码;
3.对于台湾等地区,都是用的是繁体中文,繁体中文一般都是用的是BIG5,中文一般称为大五码,其对应者微软的CP950;
4.欧洲地区的字符编码,一般是ISO(XXX);
5.字符编码发展到最后,要考虑的问题是:最好用,单独的,某个字符编码,可以囊括世界上所有的字符,包括以后可能出现的字符此种编码,就是后来的Unicode。
再来说Unicode和UTF-8,UTF-16等的关系,Unicode,只是一个字符集的概念,即表示,设计了一套逻辑,可以用不同的值,表示不同的字符,这个是Unicode标准做的事情,即支持了所有的字符;但是,要把Unicode,在计算机中实现出来,表示出来,以及把Unicode字符,从从一个地方发送到别的地方,即字符交换,则涉及到,实际上所采用的字符编码;把字符集Unicode表示出来的字符编码,有多种,最常见的有,UTF-8和UTF-16,次常见的还有UTF-32。
即:Unicode是字符集的概念,UTF-8,UTF-16是字符编码的概念;UTF-8,UTF-16等,只是Unicode的实现方式之一。

再来回归我们的主题,在python2.x中主要有str和Unicode两种字符串类型。比如’abc’是str,u’你好’则是unicode。
而到python3中改为了bytes和str,(bytes类型其实就是二进制数据),所以特别是在对文件进行操作时,如果设定是二进制方式打开,会有b”。
1.打开文件:
fp = open(filename,mode)
filename是文件名。
mode是文件的打开方式。默认是r+。主要参数有r–只读,w–新建写,a–追加,(+)–可写,b–二进制方式。常用的有r+ – 读写模式打开,rb+ – 二进制读写模式,wb+ – 二进制格式打开,用于读写,若文件已存在则覆盖,不存在则新建,a+ – 追加写。

2.读取文件
read(size): 读取size的字节数。size为空时,读取文件所有字节。
readlines(size):把读取到的值放在列表里存储并返回列表值。size并不是单纯的字节数,匹配到的是只要是大于某一行起始值的都会读出整行。
readline(size):若当前行的值大于size,则读当size值。若小于,则返回
当前行。为空则返回整行。
迭代器:文件本身可以看做一个迭代器,循环操作。像下面这样循环遍历就可以全部读出了。

f = open("foo.txt")
for i in f:
    print (i)

在文件内容比较大时,使用迭代器可以在不消耗大量内存的情况下,对文件进行操作。

3.文件写入
1.write(str):将字符串写入文件,一般情况下写入可以直接:

write("lily")

二进制模式下写入,需要转换编码格式,可以如下写入:(稍微解释下decode()和encode(),他们是分别进行解码和编码的)

bytes —-decode()—-> str(unicode)—encode()—>bytes

f.write(bytes("lily",'utf-8'))
or 
f.write("lily".encode())

2.writelines(sequence_of_strings):写多行到文件。

4.文件关闭与缓冲
需要注意的是,下面的代码并不能读出文件内容。因为文件写入后存在一定的缓冲,并没有写到系统磁盘里面,所以不能直接读取。需要关闭后再打开读取。

f = open("foo.txt",'w+')
f.write('111')
# f.close() (如果没有关闭文件,是读取不到的)
# f = open("foo.txt")
fr=f.read()
print (fr)

5.文件指针
文件指针的理解也是非常重要的。

f = open("foo.txt",'r+')
fr=f.read()
f.close()
print (fr)
# fr:0123456789abcdef

f = open("foo.txt",'r+')
fr1=f.read(3)
fr2=f.read(3)
print (fr1)
print (fr2)
# fr1:012
# fr2:345

如上代码,可以知道foo.txt里的内容是“0123456789abcdef”,用read()读出的f1和f2分别是“012”和“345”,可知,用read()读取之后,文件指针的位置也相应地后移。
文件指针的操作方法:
tell():查看文件指针当前的位置。
seek(offset[,whence]):可以用来移动文件指针。
offset偏移量;
whence偏移相对位置,分别有:os.SEEK_SET(相对文件起始位置,也可用“0”表示);os.SEEK_CUR(相对文件当前位置,也可用“1”表示);os.SEEK_END(相对文件结尾位置,也可用“2”表示)。
还是上面的例子:

fr1=f.read(3)
print(fr1) 
#fr1=012 读取三个字节
ft2=f.tell()
print (ft2)
#fr2=3  当前指针所指位置是3
fes=f.seek(2,os.SEEK_SET)
ft3=f.tell()
print (ft3)
#fr3=2   相对起始位置偏移了2个字节,当前指针是2

当然,偏移量也可以为负数,大家可以自己动作做一做。
断断续续,终于写完了。。。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值