Python学习(八)——文件操作:读、写

open()函数

打开文件

1 f = open("歌词", encoding = "utf-8")
2 data = f.read()
3 print(data)
4 f.close()
5 # 112
6 # 23445
7 # 123355
8 # 153454451515

另一种方式,不需自己close()

1 with open("a.txt","w") as f:
2     f.write('jgsgj')
3     #jgsgj

同时开两个

1 with open("a.txt","w") as f1, \
2 open("b.txt","w") as f2:
3     f1.write('jgsgj')
4     #a.txt  jgsgj
5     f2.write('jgsgj')
6     #b.txt  jgsgj

读取文件中真正的换行符

1 f = open("test22","r",encoding = "utf8",newline =""  )
2 print(f.readlines())
3 #['11111\n', 'wwerqr\n', '134tw']

 

只读 r

.readable()

  判断是否可读

.readline()

  每多写一次多读一行

 1 f = open("歌词", "r",encoding = "utf-8")
 2 #限制为只读: r
 3 print(f.readable())
 4 # True
 5 print(f.readline())
 6 #112
 7 print(f.readline())
 8 #112
 9 #
10 # 23445

注意:read()是读取全部,则再readline()是空的

.readlines()

把所有内容按行读取出来,打印成列表

1 f = open("歌词", "r",encoding = "utf-8")
2 data = f.readlines()
3 print(data)
4 # ['112\n', '23445\n', '123355\n', '153454451515']

只写 w

  重建新文档,写模式

.writable()

  判断是否可写

.write()

  写入

1 f= open("","w",encoding = "utf8")
2 f.write("12432\n")
3 f.write("wewjqwlg")
4 f.write("qwnegq")
5 # 12432
6 # wewjqwlgqwnegq

.writelines()

  写入

1 f= open("","w",encoding = "utf8")
2 f.writelines(["wengng\n","wqengng\n","weq\n"])
3 f.write("aaqwlg\n")
4 f.write("aaegq")
5 # wengng
6 # wqengng
7 # weq
8 # aaqwlg
9 # aaegq

注意:文件内容只能是字符串,只能写字符串

只追加 a

1 f= open("","a",encoding = "utf8")
2 f.writelines(["写在最后一行\n"])
3 # aaegq
4 # 写在最后一行

其他模式:

  r+ :读写

    在原文件的最上面写

  w+ :写读

  x+ :写读

  a+ :写读

 b的模式:

  rb 或 r+b

  以二进制的方式操作文件,不能指定编码

1 f = open("test11.py","rb",encoding = "utf8")
2 #Wrong 因为已经是二进制的方式编码了

  可以设置解码

 1 f = open("test11","rb")
 2 data = f.read()
 3 #"字符串”——encode——>bytes
 4 #bytes——decode——>"字符串"
 5 print(data)
 6 #b'234\r\nqre\r\n1011'
 7 print(data.decode("utf8"))
 8 # 234
 9 # qre
10 # 1011

注意:\r\n代表换行

  wb 或 w+b

1 f = open("test22","wb")
2 f.write(b'11111\n')  #以二进制方式写入,,仅ASCII字符可以
3 f.write(bytes("2222",encoding = "utf8")) #转成二进制,指定编码写入
4 f.write("".encode("utf8"))
5 # 11111
6 # 2222杨

  xb 或 x+b

  ab 或 a+b

  会直接在最后一行后面写

1 f = open("test22","ab")
2 f.write("lalal".encode("utf8"))
3 # 11111
4 # 2222杨lalal

文件的其他操作方式

.closed

  判断文件是否是关闭状态

1 print(f.closed)
2 # False

.encoding 

  显示文件的编码类型

1 f = open("test22")
2 print(f.encoding)
3 # cp936

cp936 gbk

.flush()   

  刷新

.tell() 

  显示当前光标所在位置(以字节为单位)

1 f = open("test.txt","r",encoding = "utf8")
2 print(f.tell())
3 # 0
4 f.readline()
5 print(f.tell())
6 # 8

 

.readline()

  读一行,但是不打印

.seek() 

  用来控制光标的移动,以字节为单位,默认从0开始。

  .seek(a,1) 以相对位置移动a字节,1就代表相对位置移动

  .seek(-a,2)  倒着移动a字节

  

.read()

  读取光标的位置,以字符为单位

  读取日志的最后一行内容:

 1 f = open("test.txt","rb")
 2 for i in f:
 3     char = - 15
 4     while True:
 5         f.seek(char,2)
 6         date = f.readlines()
 7         if len(date) > 1:
 8             print("文件最后一行是%s" %(date[-1].decode("utf8")))
 9             break
10         else:
11             char *= 2

 

 .truncate()

  截取,是一种写操作

  

 

posted @ 2020-02-28 20:51  Jennifer224  阅读(234)  评论(0编辑  收藏  举报