python notice5 文件操作

一、文件操作介绍

  使用python来读写文件时非常简单的操作,使用open()函数打开一个文件,获取到文件句柄,然后就可以通过文件句柄进行相关操作。(需根据打开文件方式进行相应操作)

  打开文件方式:r,w,a,r+,w+,a+,rb,wb,ab,r+b,w+b,a+b.(不带b的是对文本文件操作;带b的是对非文本文件操作,如音乐、视频等),默认使用的是r模式。

二、只读操作(r,rb)

  1.r模式:

    f = open("文件名",mode = "r",encoding = "utf-8")  #获取句柄

    content = f.read()

    print(content)

    f.close()  #关闭句柄

    注:encoding表示编码集,根据文件的实际保存编码进行获取数据。更多使用的是utf-8(pytharm)

    注:这里的文件名也包括文件的路径,推荐使用相对路径。

    注:当句柄使用结束后,一定记得关闭句柄。

  2.rb模式

    f = open("文件名",mode = "rb")  #获取句柄,rb读取数据类型是bytes类型,此时不能选择encoding编码集。

    content = f.read()

    print(content)

    f.close()  #关闭句柄,结果为文件内容的二进制码。

  3.补充    

    f.read(n)  r模式读取n个字符(rb模式读取n个字节),下次再读取时,从当前位置继续往后读取。

    f.readline()  一次读取一行数据,在readline()结尾,每次读取出来的数据结尾都会有一个\n,所以,可根据需要用strip()方法去掉\n或者空格。

    f.readlines()  将每行形成一个原色,放到一个列表中。文件一次性读完,不推荐使用。  4.循环读取:

    f = open("文件名",mode = "r",encoding = "utf-8")

    for line in f:

      print(line.strip())

三、写模式(w,wb)

  写的时候如果没有文件,则会创建一个文件;如果存在,则会把原来内容清空,再写入新内容。

  1.w模式:

    f = open("文件名",mode = "w",encoding = "utf-8")

    f.write("写的内容")

    f.flush()  #写完之后需要刷新

    f.close()

  2.wb模式:

    wb模式下,不用指定打开文件的编码,但在写文件时必须将字符串转化成utf-8的bytes数据。

    f = open("文件名",mode = "wb")

    f.write("写的内容".encode("utf-8"))

    f.flush()  #写完之后需要刷新

    f.close()

四、追加(a,ab)

  追加模式,写入的内容会追加在文件的结尾。

  f = open("文件名",mode = "a",encoding = "utf-8")

  f.write("写的内容")

  f.flush()  #写完之后需要刷新

  f.close()

五、读写模式(r+,r+b)

  对于读写模式,必须时先读。因为默认光标是在开头,准备读取的,读完之后才进行写入(写在了结尾)。若先写的话,写入的内容会覆盖掉原位置的内容,然后再从当前位置往后读取。

  f = open("文件名",mode = "r+",encoding = "utf-8")

  content = f.read()

  f.write("写入的内容")

  print(content)

  f.flush()

  f.close()

六、写读模式(w+,w+b)

  先将所有的内容清空,然后写入,最后读取。但是读取的内容是空的。

  在w+模式下,先读是读取不到数据的,再写也是将原来的内容先清空,然后写入。

  f = open("文件名",mode = "w+",encoding = "utf-8")

  f.write("写入的内容")

  content = f.read()

  print(content)

  f.flush()

  f.close()

七、追加读(a+)

  a+模式下,不论先读还是后读,都是读取不到数据的。

  f = open("文件名",mode = "a+",encoding = "utf-8")

  f.write("写入的内容")

  content = f.read()

  print(content)

  f.flush()

  f.close()

八、其他相关操作

  1.seek(n)光标移动到n位置,移动单位是byte,一个中文字符为3个字节。

  移动到开头:seek(0)

  移动到结尾:seek(0,2),seek的第二个参数表示从哪个位置进行偏移,默认是0,表示开头;1表示当前位置;2表示结尾。

  2.tell(),获取当前光标所在位置。

    print(f.tell())  #打印光标当前位置

九、文件修改

  首先将文件中的内容读取到内存中,将信息修改完毕,然后将源文件删除,将新文件的名字改成老文件的名字。

  注意:在读取文件时最好一行一行的读取。

  注意:需要调用os模块

  import os

  with open("小娃娃", mode="r", encoding="utf-8") as f1,\    #太长时用"\"连接换行,直接敲回车即可

  open("小娃娃_new", mode="w", encoding="UTF-8") as f2:  #用with时就不需要关闭句柄了。

  for line in f1:

    new_line = line.replace("⼤白梨", "冰糖葫芦")

    f2.write(new_line)

  os.remove("小娃娃") # 删除源⽂文件

  os.rename("小娃娃_new", "小娃娃") # 重命名新⽂文件

  

posted @ 2019-07-15 14:39  小路_fan  阅读(197)  评论(0编辑  收藏  举报