首页 > 代码库 > python成长之路9——文件操作open

python成长之路9——文件操作open

一. 打开文件

f = open("db","r",encoding="utf8")

  1. r:只读
  2. w:只写,会先清空文件
  3. a:追加
  4. x:如果文件存在,则报错,否则,创建文件并只写
  5. b:上面的参数都可以加“b”,意思是以二进制形式打开文件,读取写入的都是字节,就不需要考虑“encoding”啦
  6. encoding="utf8":告诉python解释器用utf8进行转码,当我们读取字符串时解释器会将字节转换成字符串,当我们写入字符串时解释器会把字符串自动转换成字节,这个过程是python解释器完成的,我们只要确保文件打开时的编码和文件保存时的编码保持一致就行
  7. +:r+,w+,a+,x+都是读写,但是我们一般用r+,因为,w+会先清空文件,a+是追加,x+文件存在会报错
  8. 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
用b打开文件

二. 操作文件

  1. read(): 无参数,读全部;有参数(n),文件打开加b的话读取n个字节,无b的话读取n个字符
  2. tell():  获取当前指针的位置(字节)
  3. seek():指针跳到指定位置(字节)
  4. write():写数据,文件打开加b的话,写字节;无b的话,写字符
  5. fileno():文件描述符
  6. flush():从内存刷到硬盘
  7. readable():文件可读返回True,否则False
  8. readline():读取一行
  9. truncate():截断文件,会把指针之后的内容全部删除
  10. for line in f:循环文件每一行
  11. 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
seek和tell
技术分享
 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 = http://www.mamicode.com/f.read(12)
 8     print(data)
 9     f.write("张杰")
10     f.seek(0)
11     data =http://www.mamicode.com/ f.read()
12     print(data)
13 
14 执行结果:
15 ab张燕ijklmnop
16 ab张燕ijklmnopqrstuvwxyz张杰
write
技术分享
 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
truncate

 

python成长之路9——文件操作open