python基础十 文件操作

1.文件操作

1.1 作用

持久化存储

1.2 文件操作总结

f = open(file="文件名字或文件路径",mode="操作模式",encoding="编码")  

r     只读    
w     清空写   
a     追加写   
rb     只读字节 
wb     清空写字节
ab     追加写字节
r+     读写   
w+     清空写读 
a+     追加写读

1.3 文件操作

1.3.1 只读文件 --> r

r: 读文本                                              
f = open("test.txt",mode="r",encoding="utf-8") 

#参数说明
f                    变量名,句柄
open            表示打开文件,通过python向操作系统发送指令
test.txt    表示要操作的文件
mode            指定对文件的操作方式,r表示读取
r                    表示读取文件
encoding    指定字符集

⚠️文件读取时只能读一遍     

在py同级目录下创建一个文件txt.txt,并写入以下内容
一只奔跑的草泥马
abc
123


1.全部读取        print(f.read())
f = open("txt.txt",mode="r",encoding="utf-8")
print(f.read())
一只奔跑的草泥马
abc
123

2.r模式下按照字符读取    print(f.read(3))
f = open("txt.txt",mode="r",encoding="utf-8")
print(f.read(5))
一只奔跑的

3.读取一行    print(f.readline().strip()) 读取一行默认最后有换行符,需要去掉
f = open("txt.txt",mode="r",encoding="utf-8")
print (f.readline().strip())
一只奔跑的草泥马


4.读取多行,以列表的形式存储    print(f.readlines())
f = open("txt.txt",mode="r",encoding="utf-8")
print (f.readlines())
['一只奔跑的草泥马\n', 'abc\n', '123']


//读取总结
print(f.read())                           #全部读取                            
print(f.read(3))                        #模式的r的情况下按照字符读取                
print(f.readline().strip())   #读取一行                
print(f.readlines())                   #读取多行,以列表的形式存储

1.3.2 清空写 --> w

w: 清空写文本                                              
f = open("txt.txt",mode="w",encoding="utf-8")

清空写会把要操作的文件先清空,然后再写入

//w模式打开文件后会清空文件内容
f = open("txt.txt",mode="w",encoding="utf-8")
print (f)
txt.txt文件中的内容会被清空

//写入内容
f = open("txt.txt",mode="w",encoding="utf-8")
print (f.write("呵呵\n哈哈"))
5
txt.txt文件中的内容为如下,并且光标在最开头
呵呵
哈哈

//连续写会从文件最后开始写
f = open("txt.txt",mode="w",encoding="utf-8")
print (f.write("呵呵\n哈哈"))
print (f.write("嘻嘻\n嘿嘿"))
5
5
txt.txt文件中的内容如下,并且光标在最开头
呵呵
哈哈嘻嘻
嘿嘿


//对文件写操作后,需要刷新和关闭文件
f = open("txt.txt",mode="w",encoding="utf-8")
print (f.write("呵呵\n哈哈"))
print (f.write("嘻嘻\n嘿嘿"))
print (f.write("啦啦\n吼吼"))
f.flush()
f.close()
5
5
5
txt.txt文件中的内容如下,并且光标在最开头
呵呵
哈哈嘻嘻
嘿嘿啦啦
吼吼

1.3.3 追加写 --> a

a: 追加写文本                                              
f = open("txt.txt",mode="a",encoding="utf-8")


//追加写文本    只会在同一行追加
f = open("txt.txt",mode="a",encoding="utf-8")
print (f.write("呵呵"))
print (f.write("哈哈"))
print (f.write("嘿嘿"))

txt.txt文件内容如下,并且光标在最开头
呵呵哈哈嘿嘿

1.3.4 只读字节 --> rb

⚠️二进制方式读取文件不能指定字符集
f = open("txt.txt",mode="rb",encoding="utf-8")
print (f.read())
ValueError: binary mode doesn't take an encoding argument

//txt.txt文件中的内容为 呵呵哈哈嘿嘿
f = open("txt.txt",mode="rb")
print (f.read())
b'\xe5\x91\xb5\xe5\x91\xb5\xe5\x93\x88\xe5\x93\x88\xe5\x98\xbf\xe5\x98\xbf'

以上的字节的内容就是 呵呵哈哈嘿嘿

1.3.5 清空写字节 --> wb

1. 字节内容说明b'\xe5\x91\xb5\xe5\x91\xb5\xe5\x93\x88\xe5\x93\x88\xe5\x98\xbf\xe5\x98\xbf' txt.txt的内容是 呵呵哈哈嘿嘿

2. 清空txt.txt文件

3. f.write()括号中只能写字节 b'\xxx'⚠️
f = open("txt.txt",mode="wb")
f.write(b'\xe5\x91\xb5\xe5\x91\xb5\xe5\x93\x88\xe5\x93\x88\xe5\x98\xbf\xe5\x98\xbf')

4.此时txt.txt文件内容如下
呵呵哈哈嘿嘿

1.3.6 追加写字节 --> ab

1. 字节内容说明b'\xe5\x91\xb5\xe5\x91\xb5\xe5\x93\x88\xe5\x93\x88\xe5\x98\xbf\xe5\x98\xbf' 的内容是 呵呵哈哈嘿嘿

2. txt.txt文件内容是 呵呵哈哈嘿嘿

3. f.write()括号中只能写字节 b'\xxx'⚠️
f = open("txt.txt",mode="ab")
f.write(b'\xe5\x91\xb5\xe5\x91\xb5\xe5\x93\x88\xe5\x93\x88\xe5\x98\xbf\xe5\x98\xbf')

4.此时txt.txt文件内容如下,已成功追加
呵呵哈哈嘿嘿呵呵哈哈嘿嘿

1.3.7 读写 --> r+

txt.txt文件内容为 呵呵哈哈嘿嘿

f = open("txt.txt","r+",encoding="utf-8")
a = f.read()                                                        
f.write("这是读写")                       
呵呵哈哈嘿嘿

此时txt.txt文件内容为
呵呵哈哈嘿嘿这是读写

1.3.8 清空写读 --> w+

txt.txt文件内容为 呵呵哈哈嘿嘿

f = open("txt.txt","w+",encoding="utf-8")
print (f.write("清空写读"))
print (f.read())
4


此时txt.txt文件内容如下,并且光标在最后边
清空写读

1.3.9 追加写读 --> a+

txt.txt文件内容为 呵呵哈哈嘿嘿

f = open("txt.txt","a+",encoding="utf-8")
print (f.write("追加写读"))
print (f.read())

此时txt.txt文件内容如下,并且光标在追字前边
呵呵哈哈嘿嘿追加写读

1.4 光标操作

txt.txt内容为 呵呵哈哈嘿嘿

光标操作总结                                                                 
f = open("txt.txt","r",encoding="utf-8")      
f.seek(0,0)           #移动到文件头部                     
f.seek(0,1)           #移动到光标当前位置                  
f.seek(0,2)           #移动到文件末尾                    
f.seek(3)             #移动3个字节,根据编码不同决定移动的字节大小     
print(f.read())                            
print(f.tell())      #查看光标 返回的是字节

1.5 with open

with open     
1.自动关闭文件      
2.可以同时操作多个文件  
3.as 起别名        

现在有两个文件 t1 t2,t1内容为t1,t2内容为t2
with open("t1","r",encoding="utf-8") as f1, \
     open("t2","r",encoding="utf-8") as f2:

    print (f1.read())
    print (f2.read())

    t1
    t2

⚠️两个open之间必须以逗号分隔,print必须在with的下一级

1.6 修改文件名及文件内容

1.6.1 修改文件名

现在有两个文件 t1 t2,t1内容为t1,t2内容为t2
现在想把两个文件名互换 即t1 --> t2   t2 --> t1

转换思路,将t1改名为临时文件t3,然后把t2改名为t1,最后把t3改名为t1,即
t1 --> t3
t2 --> t1
t3 --> t2



import os  # 与操作系统做交互
os.rename("t1","t3")
os.rename("t2","t1")
os.rename("t3","t2")

此时t1内容为t2,t2内容为t1

1.6.2 修改文件内容

t1的内容如下
abc
okm
tgb

现在要把t1中的b替换成“呵呵”

替换思路,拷贝t1为t2,⚠️尽量不在原文件修改


⚠️文本中存储的都是字符串                                     
with open("t1","r",encoding="utf-8")as f,\    
     open("t2","w",encoding="utf-8")as f1:    
     for i in f:                                 
         f1.write(i.replace("b","呵呵"))          
         f1.flush()                              

此时t2内容如下,已经将t1中的b替换成了呵呵
a呵呵c
okm
tg呵呵


因为t1是读的,t2才是写的文件,现在的需求是t1中修改,因此还需要转换一下文件名
即把t1与t2的文件名相互替换,这样才能达到需求,同时改名后的源文件t2不要删除

import os  # 与操作系统做交互
os.rename("t1","t3")
os.rename("t2","t1")
os.rename("t3","t2")

此时t1文件内容如下
a呵呵c
okm
tg呵呵

t2文件内容如下
abc
okm
tgb


#文件替换内容步骤总结
1.不要在原文件操作,需要拷贝一个文件
2.读原文件,改拷贝的文件
3.改完拷贝的文件后再替换文件名
4.保留替换文件名后的原文件
泡泡吐肥皂o © gitbook.pptfz.top 2021 all right reserved,powered by Gitbook文件修订时间: 秃笔南波湾!!!

results matching ""

    No results matching ""