1、 文件操作:
固定流程:
1)打开文件 open with open
2) 操作 读 写 追加
3)关闭
读文件并且打印文件内容:
fp=open("e:\\a.txt","r",encoding="utf-8")
content = fp.read()
fp.close()
Print(content)
>>> fp=open("e:\\a.txt","r",encoding="gbk")
>>> content=fp.read()
>>> fp.close
<built-in method close of _io.TextIOWrapper object at 0x00000286A7DFD7E0>
>>> fp.close()
>>> content
'#encoding="gbk"\n123\n234'
>>> fp=open("e:\\a.txt","r")
>>> content=fp.read()
>>> fp.close()
>>> content
'#encoding="gbk"\n123\n234'
>>> print(content)
#encoding="gbk"
123
234
fp=open("e:\\a.txt","r")
content=fp.readlines()
fp.close()
for i in content:
print(i,end="")
2、全部读read,readline
read:读取文件的全部内容,存到一个字符串里面
readlines:读取文件的全部内容,文件的内容放到一个列表里面
缺点:太占内存
如果你的内存:4g,你要读的文件是4.5g,你觉得会怎么样呢?
用空间换时间
用时间换空间
3、编码encoding
open encoding—>我用什么编码去读文件。
文件存的是什么编码,你就要用什么编码去读
文件存的是utf-8,encoding=utf-8
文件存的是utf-8,encoding=gbk去读,那么这个就会报错。
文件中存的内容在磁盘上,都是utf-8或者是gbk的编码内容(bytes类型)
读到python程序的时候,放到列表或者字符串变量里面
放的都是str类型
open帮你做一件事:
用encoding设定的编码,将文件中的bytes类型转化为str类型。
转化的过程实际上就是bytes.decode()方法的调用。
如果encoding的编码和文件中的不一致,必然会转换失败。
fp = open("e:\\a.txt",encoding="utf-8")
content = fp.readlines()
fp.close()
for line in content:
if "\n" not in line:
print(line)
else:
print(line,end="")
4、逐行打印:
fp = open("e:\\a.txt",encoding="utf-8")
for line in fp:#取到从磁盘上读取的一行,读取的量会很小
print(line,end="")
fp.close()
5、写:清空写,追加写
fp = open(“e:\a.txt”,“w”,encoding=“utf-8”)
“w”:清空写,文件如果不存在,会自动创建文件。
如果文件已经在了,且有内容,直接全部清空。
write函数:写入必须用字符串,写入了之后,如果不够64kb内容
操作系统不会将写入的内容,存到磁盘中。
什么时候会存呢?
1)文件关闭
2)程序关闭(自动把文件关闭)
3)flush
fp = open("e:\\a.txt","a+")
fp.write("孙千丽1")
fp.write("孙千丽2")
fp.write("孙千丽3")
fp.close()
fp = open("e:\\a.txt","r+")
fp.read()#文件的游标最会到文件的最后了
fp.write("千丽1")
fp.write("千丽2")
fp.write("千丽3")
fp.close()
6、游标
你当前在文件中的位置
当你打开文件的时候,你当前位置是0,
写了一个字符或者读了一个字符,位置就变为1了。
然后写了n字符或者读了n个字符,位置就变为1+n了。
再读内容,只会读取1+n后面的所有内容
在写内容,只会从1+n的位置开始写,把原有的内容进行覆盖。
7、r+和a+的区别
r+:会根据你游标当前的位置去写入文件内容
a+:不管你游标在哪里,写的内容自动会跳转到文件的最后部分。
fp = open("e:\\a.txt","r+")
fp.seek(10,0)
print(fp.tell())
fp.write("--"*10)
fp.close()
追加写:"a+" "r+"
fp = open("e:\\a.txt","a+")
fp.read(5)#文件的游标最会到文件的最后了
fp.write("光荣之路16")
fp.write("光荣之路17")
fp.seek(10,0)
fp.write("光荣之路18")
fp.close()
8、r+和a+的区别
r+:默认从文件的第一个字符开始写,如果使用了seek,定位
到了文件中的某个位置,则从这个位置开始写。如果read()后
改变了游标的位置,写的内容会追加到最后面
a+:不管你游标在哪里,写的内容自动会跳转到文件的最后部分。
>>> fp = open("e:\\a.txt","a+")
>>> fp.read()
''
>>> fp.seek(0,0)
0
>>> fp.read()
'1234567899--------------------678997767777777777\n12345678997767777777777光荣之
路16光荣之路17光荣之路18'
>>> fp = open("e:\\a.txt","r+")
>>> fp.read()
'1234567899--------------------678997767777777777\n12345678997767777777777光荣之
路16光荣之路17光荣之路18'