zoukankan      html  css  js  c++  java
  • python之 文件操作

    一、初识文件操作

      使用python来读写文件是非常简单的操作,我们使用open函数来打开一个文件,获取到

    文件句柄,然后通过文件句柄就可以进行各种各样的操作,同过打开方式的不同能够执行的

    操作也会有相应的差异。

      打开文件的方式有:r,w, a, r+,w+, a+, rb,  wb, ab, r+b, w+b, a+b 默认使用的r模式打

    开文件。

    二、只读操作(r,rb)

      

    1 f = open('文件1.txt' , mode = 'r', encoding = 'utf-8')
    2 content = f.read()
    3 print(content)
    4 f.close()

      需要注意encoding表示编码集。根据文件的实际保存编码惊醒获取数据,对我们而言更多

    的是utf-8.

      rb 读取出来的数据是bytes类型,在rb模式下。不能选择encoding字符集

    1 f = open('文件1.txt' , mode = 'rb')
    2 content = f.read()
    3 print(content)
    4 f.close()

       rb 的作用:一般用来读取一些非文本文件,比如像MP3、视频之类的文件。这些文件是无法

    直接显示在屏幕上的。

    绝对路径和相对路径

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

      2.相对路径:同一个文件夹下的文件,相对于当前这个程序所在的文件夹而言,如果在同一个文件夹中,则相对路径就是这个文件名,如果在上一层文件夹。则需要用  ../  来返回本文件加的上层目录。

      读取文件方法:

      read()  将文件中的所有内容都读出来

      read(n)读取n个字符

      readline()一次读取一行数据

      readlines()将每一行形成一个元素,放到一个列表中,将所有的内容都读出来。

      循环读取

    1 f = open("文件1",mode = "r",encoding = 'utf-8') 
    2 for line in f:
    3     print(line.strip())
    4 f.close()

    三、写模式
      写的时候,如果没有源文件则会创建源文件,如果文件存在,则将源文件原来的文件内容删除,在写入内容

    with open("文件1",mode = "w",encoding = "utf-8") as f:
        f.write("我是谁")

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

      

    1 with open("文件1",mode = "wb") as f:
    2     f.write("我是谁".encode('utf-8'))

    四、追加(a,ab)

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

    f = open("文件", mode="a", encoding="utf-8")
    f.write("麻花藤的最爱")
    f.flush()
    f.close()

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

      对于读写模式,必须是先读,因为默认光标是在开头的,准备读取的,当读完之后在进行写入。

     1 f = open("文件", mode="r+", encoding="utf-8")
     2 content = f.read()
     3 f.write("麻花藤的最爱")
     4 print(content)
     5 f.flush()
     6 f.close()
     7 
     8 
     9 结果:
    10 正常的读取之后, 写在结尾

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

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

    1 f = open("文件", mode="w+", encoding="utf-8")
    2 f.write("哈哈")
    3 content = f.read()
    4 print(content)
    5 f.flush()
    6 f.close()

    七、追加读(a+)

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

    1 f = open("文件", mode="a+", encoding="utf-8")
    2 f.write("马化腾")
    3 content = f.read()
    4 print(content)
    5 f.flush()
    6 f.close()

    八、其它相关操作

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

      通常使用的是将光标移动到开头或者结尾。

      移动到开头:seek(0)

      移动到结尾:seek(0,2)

      ps   seek(0,1)表示当前位置

    f = open("文件", mode="r+", encoding="utf-8")
    f.seek(0) # 光标移动到开头
    content = f.read() # 读取内容, 此时光标移动到结尾
    print(content)
    
    f.seek(0) # 再次将光标移动到开头
    f.seek(0, 2) # 将光标移动到结尾
    
    content2 = f.read() # 读取内容. 什么都没有
    print(content2)
    
    f.seek(0) # 移动到开头
    f.write("张国荣") # 写入信息. 此时光标在9 中文3 * 3个 = 9
    
    f.flush()
    f.close()

      2.tell()  通过它可以获取光标的当前位置

     1 f = open("文件", mode="r+", encoding="utf-8")
     2 f.seek(0) # 光标移动到开头
     3 content = f.read() # 读取内容, 此时光标移动到结尾
     4 print(content)
     5 f.seek(0) # 再次将光标移动到开头
     6 f.seek(0, 2) # 将光标移动到结尾
     7 content2 = f.read() # 读取内容. 什么都没有
     8 print(content2)
     9 f.seek(0) # 移动到开头
    10 f.write("张国荣") # 写入信息. 此时光标在9 中文3 * 3个 = 9
    11 print(f.tell()) # 光标位置9
    12 f.flush() 13 f.close()

      3.truncate()截断文件

     1 f = open("文件", mode="w", encoding="utf-8")
     2 f.write("哈哈") # 写入两个字符
     3 f.seek(3) # 光标移动到3, 也就是两个字中间
     4 f.truncate() # 删掉光标后面的所有内容
     5 f.close()
     6 f = open("⼩小娃娃", mode="r+", encoding="utf-8")
     7 content = f.read(3) # 读取12个字符
     8 f.seek(4)
     9 print(f.tell())
    10 f.truncate() # 后⾯面的所有内容全部都删掉
    11 # print(content)
    12 f.flush()
    13 f.close()

    九、文件的修改以及文件的另一种打开方式

      文件的修改只能将文件中的内容读取到内存中,将信息修改完毕,然后将源文件删除,将新文件的文件名改为原来文件的文件名。

     

     1 # ⽂文件修改
     2 import os
     3 
     4 with open("小娃娃", mode="r", encoding="utf-8") as f1,
     5 open("小娃娃_new", mode="w", encoding="UTF-8") as f2:
     6   content = f1.read()
     7   new_content = content.replace("冰糖葫芦", "大白梨")
     8   f2.write(new_content)
     9 
    10 os.remove("小娃娃") # 删除源文件
    11 os.rename("小娃娃_new", "⼩小娃娃") # 重命名新⽂件

      弊端:一次将所有内容进行读取,内存溢出。解决方案:一行一行的读取和操作

     1 import os
     2 
     3 with open("小娃娃", mode="r", encoding="utf-8") as f1,
     4 open("小娃娃_new", mode="w", encoding="UTF-8") as f2:
     5 
     6     for line in f1:
     7         new_line = line.replace("大白梨", "冰糖葫芦")
     8         f2.write(new_line)
     9 
    10 os.remove("小娃娃") # 删除源文件
    11 os.rename("小娃娃_new", "小娃娃") # 重命名新⽂文件
  • 相关阅读:
    登录及注册页面
    多方式登录
    git笔记
    后台主页模块设计
    auth模块迁移后需新增字段
    使用idea构建SpringBoot源码
    Springboot相关面试问题
    Springboot自动加载工具-devtools的理解与使用
    SpringBoot项目的一些简单常用配置
    Java线程池及Executor框架的理解
  • 原文地址:https://www.cnblogs.com/baijinshuo/p/9436777.html
Copyright © 2011-2022 走看看