美文网首页
day11 文件处理详解

day11 文件处理详解

作者: 荭鲤鱼与緑鲤鱼与驴 | 来源:发表于2020-07-19 19:00 被阅读0次

Ⅰ  文件的打开模式

    控制文件读写操作的模式

r 只读操作

只读(默认的):在文件不存在时报错,文件存在时文件指针跳到文件开头

f = open('a.txt', mode = 'rt', encoding = 'utf-8')

.read() 将文件读出来并赋值

.readable() 查询文件是不是可读文件

.writable() 查询文件是不是可写文件

f.close() 关闭文件

w 只写操作

只写:在文件不存在时则创建空文件,文件如果存在则清空,文件指针跳到文件开头

f = open('b.txt',mode = 'wt', encoding = 'utf-8')

.write('需要写入内容\n') \n为换行符

.close() 关闭文件

a 只追加写入操作

只追加写:在文件不存在时则创建空文件,文件存在时也不会清空,文件指针则跳到文件末尾

f=open('c.txt',mode='at',encoding='utf-8')

w与a的异同

相同:在打开了文件不关闭的情况写,连续性的写入,新的内容永远跟在老内容之后

不同:重新打开文件, w 会清空老的内容,而 a 模式会保留老的内容,并且指针跳到文件末尾

Ⅱ  控制文件读写内容的模式

t 读写 str格式

默认的:读写都是以str字符串为单位,一定要指定encoding编码模式

f = open('a.txt', mode = 'rt', encoding='uft-8')

b 读写 bythe格式

读写都是以bytes为单位,一定不能指定encoding编码模式参数

f = open('a.txt', mode = 'rb')

取出的文件是二进制格式,如果要显示的话需要将其解码操作

data = f.read() #将文件赋值给data

data.decode('utf-8') #将文件解码

Ⅲ  补充

r w a

tb必须与rwa联用

+必须与rwa联用:r+ ,w+ ,a+

r+ 用于读写,不创建

w+ 可读可写,创建

a+ 打开文件并追加读写,创建

with open('a.txt') as f: 默认是mode = rt 模式

Ⅳ  文件操作的其他方法

读的相关方法:

with open('a.txt' , mode = 'rt' , encoding = 'utf-8') as f:

.readline() 只读取文档一行数据

.readlines() 读取文件所有数据,包含转义符号\n

写的相关方法:

with open('a.txt' , mode = 'wt' , encoding = 'utf-8') as f:

.write('需要写入的文件') # 此方式将需要保存的数据一次性写入到内存,然后在写入到硬盘中.文件如果大小比较小了还行,几十上百个G之后就不行了,内存放不下了

就用到了for循环写入的方法:for line in lines :

f.write(line) #将分多次写入到硬盘中

f.writeslines('hello')#此功能相当于循环写入,将hello分了五次写入,一次只写入一个字符

for i in range(100):#用range设置写入次数

.write('%s\n' %i) #循环写入%s赋值大法

.flush() #让计算机频繁的往硬盘存数据,不要等待

Ⅴ  控制文件内指针移动

控制文件内指针的移动都是以字节为单位

只有一种特殊情况, t 模式下的read(n) ,代表的是n个字符,此外代表的全都是字节

with open ('f.txt' , mode = 'rt' , encoding = 'utf-8') as f:

data = f.read(6) #读取6个字符从文件开头处

正常情况 :

with open ('a.txt' , mode = 'rb' ) as f:#碰到 b 就不能再使用encoding指定编码格式,因为 b 模式都是二进制数

data = f.read(6) #代表取出6个字节的数据(需要注意英文字符一个字符对应一个字节,中文字符一个字符对应三个字节,如果结束的字节不完整会报错

data.decode('utf-8') #将data用utf-8解码

模式 .seek(n , 模式) # n 代表的移动的字节个数

0 模式==>开头位置

参照文件开头移动(只有0模式可以再t模式下使用,1和2模式只能再b模式下使用

with open ('a.txt' , mode = 'rt' , encoding = 'utf-8' ) as f:

f.seek(5 , 0 ) # 表示 将指针移动到开头后第五个字节,如果打印该结果,前五个字节不会取出 #转义符\n 在文件中算两个字节

1 模式==>当前位置

参照指针当前所在的位置移动

with open ('f.txt' mode = 'rb') as f:

f.seek(3,1) #默认指针再文件开头位置

f.seek(3,1) #经过两次移动3字节之后,指针已经到了第六字节的位置

此模式下结果需要进行编码 print(f.read().decode('utf-8')) #decode 解码#encoding 编码

2 模式==>末尾位置

with open('a.txt' , mode = 'rb' ) as f:

f.seek(0,2) #指针从末尾移动0个字节

f.seek(3,2) #指针从末尾向后移动3个字节,因为后面没有数据所以指针等于没动

f.seek(-4,2) #指针从末尾向前开头移动4个字节

.truncate(n) #从文件开头往后数n个字节保留,其余全部删除

.truncate() #从文件开头往后数指针当前所在位置,其余全部删除. 此代码前如果指针在开头未移动,

相关文章

网友评论

      本文标题:day11 文件处理详解

      本文链接:https://www.haomeiwen.com/subject/gmerkktx.html