python成长之路9——文件操作open
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python成长之路9——文件操作open相关的知识,希望对你有一定的参考价值。
一. 打开文件
f = open("db","r",encoding="utf8")
- r:只读
- w:只写,会先清空文件
- a:追加
- x:如果文件存在,则报错,否则,创建文件并只写
- b:上面的参数都可以加“b”,意思是以二进制形式打开文件,读取写入的都是字节,就不需要考虑“encoding”啦
- encoding="utf8":告诉python解释器用utf8进行转码,当我们读取字符串时解释器会将字节转换成字符串,当我们写入字符串时解释器会把字符串自动转换成字节,这个过程是python解释器完成的,我们只要确保文件打开时的编码和文件保存时的编码保持一致就行
- +:r+,w+,a+,x+都是读写,但是我们一般用r+,因为,w+会先清空文件,a+是追加,x+文件存在会报错
- with open("文件名","打开方式",encoding="utf8") as f: 推荐用这种文件打开方式,不用关闭文件而且可以同时打开两个文件,如下: with open("db","r",encoding="utf8") as f1, open("db2","w",encoding="utf8") as f2
例子:用“b”打开文件
1 #用b打开文件 2 with open("db","wb") as f: 3 temp=bytes("张燕",encoding="utf8") 4 print(temp) 5 f.write(temp) 6 with open("db","rb") as f: 7 print(f.read()) 8 9 执行结果: 10 b‘\\xe5\\xbc\\xa0\\xe7\\x87\\x95‘ 11 b‘\\xe5\\xbc\\xa0\\xe7\\x87\\x95‘
二. 操作文件
- read(): 无参数,读全部;有参数(n),文件打开加b的话读取n个字节,无b的话读取n个字符
- tell(): 获取当前指针的位置(字节)
- seek():指针跳到指定位置(字节)
- write():写数据,文件打开加b的话,写字节;无b的话,写字符
- fileno():文件描述符
- flush():从内存刷到硬盘
- readable():文件可读返回True,否则False
- readline():读取一行
- truncate():截断文件,会把指针之后的内容全部删除
- for line in f:循环文件每一行
- f.close():关闭文件
1 #seek是不受encoding的影响的,seek都是按字节的,如果你有中文,seek(1)会把这个中文劈开 2 with open("db","r+",encoding="utf8") as f: 3 f.seek(3) 4 f.write("flag") 5 6 执行前db内容: 7 ab张燕ijklmnopqrstuvwxyz张杰 8 执行后db内容: 9 ab?flag?ijklmnopqrstuvwxyz张杰 10 11 #tell()获取当前指针的位置,和seek一样也是按字节来算的 12 with open("db","r+",encoding="utf8") as f: 13 print(f.read()) 14 with open("db","r+",encoding="utf8") as f: 15 print(f.read(2)) 16 print(f.tell()) 17 18 执行结果: 19 张燕abcdefghijklmnopqrstuvwxyz 20 张燕 21 6
1 #f.write() 从指针位置开始写,如果指针在文件中间会覆盖对应的字节 2 # 但是如果一旦开始读文件,不管有没有读到文件尾,python规定都会从文件尾开始写 3 with open("db","r+",encoding="utf8") as f: 4 f.seek(2) 5 f.write("张燕") 6 f.seek(0) #主动把指针调到文件开头 7 data = f.read(12) 8 print(data) 9 f.write("张杰") 10 f.seek(0) 11 data = f.read() 12 print(data) 13 14 执行结果: 15 ab张燕ijklmnop 16 ab张燕ijklmnopqrstuvwxyz张杰
1 #f.truncate() 2 #截断文件,会把指针之后的内容全部删除 3 with open("db","r+",encoding="utf8") as f: 4 print(f.read()) 5 f.seek(3) 6 f.truncate() 7 f.seek(0) 8 print(f.read()) 9 10 执行结果: 11 1234567890 12 123
以上是关于python成长之路9——文件操作open的主要内容,如果未能解决你的问题,请参考以下文章