day08文件的基本操作

1,文件的操作:我们使用open( )来函数来打开一个文件获取到文件句柄,同过句柄就可以进行各种操作了,根据打开的方式不同,执行的操作也不同.

  1>只读(r )

    列如:f = open("护⼠士少妇嫩模",mode="r", encoding="utf-8")................f....在这里我们是获取到要读文件的句柄,open是打开文件,第一个引号是要打开的文件名称,mode.是用什么方式打开,encoding是编码集根据文件的实际保存编码进行获取数据(utf-8)

      content = f.read()......................................................................把执行读的这个文件赋值给content

      print(content).........................................................................获取要读文件的内容

      f.close().................................................................................再把源文件关闭

  1.1>只读(rb)在rb模式下读取出来的数据是bytes类型,应为是bytes,所以没必要在进行encoding.

    列如:f = open("护⼠士少妇嫩模",mode="rb").............................同理这里把encoding="utf-8"去掉了

      content = f.read()

      print(content)......................................................此时打印的内容是:b'\xe6\xaf\x85\xe5\x93\xa5, \xe5\xa4\xaa\xe7\x99\xbd, wuse\n\xe5\x91                                                                                                                                 \xb5\xe5\x91\xb5\n\xe6\x97\xa5\xe5\xa4\xa9'是一个将字符串经过utf-8编码的bytes

      f.close()

  rb的作用是在我们读取非文本的时候比如:图像,视频等信息时,就要用到rb,这种数据没办法直接显示,文件的上传下载还会用到

  2,绝对路径和相对路径

    2.1>绝对路径:从磁盘根目录开始一直到文件名

    2.2>相对路径:同一个文件下的文件,相当于当前文件夹而言,如果在同一个文件夹下,则相对路径就是这个文件名,如果在上一层则要../

    推荐使用相对路径

  1.2>只读(r,rb)格式:   .read( )括号中也可以添加内容,内容的单位是字符   .read(n)就是读取n个字符,如果再读,就会从当前位置继续去读,不是从头读.

    列如:f = open("护⼠士少妇嫩模",mode="r", encoding="utf-8") 

      content = f.read(3)......................................................默认光标在开始的位置,开始读3个字符,从光标当前位置向后读3个字符

      print(content)..............................................................此时打印结果是:雨一直

      f.close()......................................................................关闭源文件

    .....#............rb模式和这个一样,只不过读出来是字节

  1.3>  .readline( )一次读取一行,readline()每次读出来的数据都会有\n,所以我们要用   .strip()来去掉\n或者空格  

    列如:f = open("护⼠士少妇嫩模",mode="r", encoding="utf-8")

      content = f.readline()...........................................当括号里边什么都不加时默认读第一行,当括号里加数字时,就是读几个字符和  .read(n)一样

      print(content).......................................................此时打印结果是:雨一直下,气氛不算融洽

      f.close()................................................................关闭源文件

    ##....在这里每一行都当做是一个元素,放到一个列表中.(  .readlines())

  1.4>循环读取,这样就避免一次一次去把每一行敲出来,节省重复性工作,且每次读取一行,也避免了内存奔溃.

    列如:f = open("护⼠士少妇嫩模",mode="r", encoding="utf-8")

      for line in f:...........................................................把句柄中的每一行拿出来,放到line中

        print(line.strip()).........................................拿出来以后因为每一行有一个换行,打印的时候有一个默认的换行所以打印出来有2次换行,因                                                                                                  此需要删除一个换行

        f.close()

3,写读模式(w,wb):致谢的文件,如果没有则会创建一个文件,如果已经存在了文件,就会将源文件中的内容删除再,冲新输入新的内容.

    列如:f = open("天龙八部",mode= "w",encoding= "utf-8")...........当没有"天龙八部"这个文件时,就创建一个新的文件

      content = f.write("乔峰").....................................................在"天龙八部"的文件里先清空,在写入"乔峰"

      f.flush()...............................................................................刷新,养成好习惯(当数据量庞大的时候把数据搞笑的传输过去)

      f.close()...............................................................................关闭源文件

      print(content)..................................................................此时打印的结果是:2(表示写入的是2个字符)是看不见"乔峰"的

      f = open("天龙八部",mode= "w")............................................(w b)形式

      content = f.write("马尔扎哈".encode("utf-8"))..........................写入的字符串必须要转化为bytes(字节的形式)

      f.flush()

      f.close()

      print(contenr).......................................................................此时打印的是:12(4个字符,12个字节)

4,追加(a  ab):在追加的模式下,我们写入的内容会追加到文件的结尾.

    列如:f = open("天龙八部",mode= "a",encoding= "utf-8").................是在以有文件里增加内容

      content = f.write("阿紫")..........................................................在原文件的末尾增加"阿紫"

      f.flush().................................................................................刷新

      f.close()..................................................................................关闭原文件

      print(content)...........................................................................此时打印的结果是:2(表示写入的是2个字符)也是看不见的

5,读写模式(r+,r+b)对于读写必须是先读,光标默认是从头开始的,当读完了之后再写入.

    列如:f = open("天龙八部",mode= "r+",encoding= "utf-8")..........................打开文件是读写模式

      content= f.read().................................................................................先读文件当括号里加上数字,就读出几个字符

      f.write("刺激战场").............................................................................在文件的末尾增加"刺激战场"(##在读取n后,写入也是在末尾添加)

      f.flush()

      f.close()

      print(content)...................................................................................此时打印的结果是:张无忌马尔扎哈("刺激战场"是看不到的,因为没有读)

      f.write("刺激战场")..........................................................................先写再度就会在文件的开始覆盖相应的字符

      content = f.read()..........................................................................再读就是读光标之后的字符,当括号里有数时就读几个字符

      f.flush()

      f.close()

      print(content)...............................................................................此时打印的是:尔扎哈

    ###...................在r+模式下必须是先读取再写入

6,其他相关操作:    .seek()光标移动位置.

  1>   .seek(n)光标移动到n的位置,这里光标移动的单位是byte,所以如果是utf-8的中文部分是3的倍数.

    seek(0)是表示光标在开头

    seek(0,2)表示光标从开头移动到结尾.......0表示光标移动到开头,1表示移动到当前位置,2表示光标移动到结尾.

    列如:f = open("天龙八部",mode= "r+",encoding= "utf-8")

      f.seek(3)...............................................................................先把光标从当前位置移动3个字节(必须是3的倍数,否则报错)

      content = f.read.(3)...............................................................文件从当前光标向后读3个字符

      f.flush

      f.close

      print(content)......................................................................此时打印结果是:无忌玛(光标先移动3个字节,再读取3个字符)

 7,文件修改:将文件中的内容读取到内存上,然后把源文件删除,再把内存里读取到的内容存储到一个新的文件中,在将新的文件命名为原文件的名字(掩耳盗铃)文件名字一样但是文件内容是不一样的,完成文件的修改.

    格式:import  os...................................................................................................调用函数

      with open("a.txt",mode = "r+",encoding = "utf-8") as f1,\............................通过"r+"的模式打开文件"a.txt"用f1作为句柄

         open("a.txt_副本",node = "r+", encoding="utf-8") as f2:....................同时过"r+"的模式打开另一个文件"a.txt_副本"用f2作为句柄(前提是                                                                                                                                          a.txt_副本这个文件存在)

        for line in f1:.........................................................................................把句柄f1的文件每一行作为元素遍历出来

          new_line = line.replace("3","9")...................................................把遍历出来的每一行中的"3"换成"9"

          f2.write(new_line).........................................................................把改变以后每一行新的元素放在心打开的文件f2中

      os.remove("a.txt")........................................................................................把原文件删除

      os.rename("a.txt_副本","a.txt")....................................................................把打开的新文件命名成原文件名

    #......................1>先打开2个文件

    # /.....................2>把要修改的文件遍历出来

    #........................3>修改遍历出来的文件并赋值给新的变量

    #......................4>把修改好的元素写到新文件中

    #.....................5>把原文件删除,在命名新文件位原文件名字

     

  

猜你喜欢

转载自www.cnblogs.com/ljc-0923/p/9314130.html
今日推荐