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

    一、文件操作的函数

      open("文件名(路径)",mode="?",encoding="字符集")

      模式

      r ,rb  只读

      w,wb  只写

      a,ab  追加

      r+      读写

      w+    写读

      a+    写读(追加写读)

     二 只读(r,rb)

      1.只读(r,rb)

    f = open("aaa.txt",mode="r", encoding="utf-8")
    content = f.read()
    print(content)
    f.close()
    

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

    f = open("aaa.txt",mode="rb" )
    content = f.read()
    print(content)
    f.close()
    

      rb用来读取非文本的文件,比如MP3,图片,视频等 因为这种数据是没办法直接显示出来的. 在后面我们文件上传下载的时候还会用到. 还有我们在看的直播,实际都是这种数据。

      2.绝对路径和相对路径:
        1. 绝对路径:从磁盘根目录开始一直到文件名.
        2. 相对路径:同一个文件夹下的文件. 相对于当前这个程序所在的文件夹而言. 如果在同
        一个文件夹中. 则相对路路径就是这个文件名. 如果在上一层文件夹. 则要../

        推荐使用相对路径

      3.文件操作的方法

      1.read()

       将文件中的内容全部读取出来,弊端:占内存,如果文件过大,容易导致内存崩溃

      

    f = open("bbb.txt", mode="r", encoding="utf-8")
    content = f.read()
    print(content)
    

      2.read(n)

      读取n个字符,需要注意的是,如果再次读取,那么会在当前位置去读而不是从读,如果使用的是rb模式。则读取出来n个字节

      

    f = open("bbb.txt", mode="r" encoding="utf-8")
    content = f.read(4)
    print(content)
    

      3.readline() 一次读取一行数据,注意:readline()结尾,注意每次读出来的数据都会有一个 ,需要使用strip()方法去掉 或空格

    f = open("ccc.txt", mode="r", encoding="utf-8")
    content1 = f.readline()
    content2 = f.readline()
    content3 = f.readline()
    

      

      4.readlines()将每一行形成一个元素,放到一个列表中,将所有的内容读取出来,容易导致内存崩溃,不推荐使用

      

    f = open("ccc.txt", mode="r", encoding="utf-8")
    lst = f.readlines()
    print(lst)
    for line in lst:
        print(line.strip())
    

      5.循环读取 ,这种方法是最好的,每次读取一行内容,不会产生内存溢出问题

    f = open("ccc.txt", mode="r", encoding="utf-8")
    for line in f:
        print(line.strip())
    

      读取完的文件句柄一定要关闭 f.close()

    三、写模式(w,wb)

      写的时候,如果没有文件,则会创建文件,如果文件存在,则将原来的内容删除再写入新内容

    f = open("xxx", mode="w", encoding="utf-8")
    f.write("asdf")
    f.flush() # 刷新
    f.close()
    

    四、追加(a,ab)

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

    f = open("zzz", mode="a", encoding="utf-8")
    f.write("asdf")
    f.flush()
    f.close()
    

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

      对于读写模式,必须是先读,因为默认光标是在开头的,准备读取的,当读完了之后再进行写入,我们以后使用频率最高的模式就是r+

    f = open("zzz", mode="r+", encoding="utf-8")
    content = f.read()
    f.write("asdf")
    print(content)
    f.flush()
    f.close()
    

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

      先将所以的内容清空,然后写入,最后读取,但是读取的内容是空的,不长用

    f = open("zzz", mode="w+", encoding="utf-8")
    f.write("asdf")
    content = f.read()
    print(content)
    f.flush()
    f.close()
    

    七、追加读(a+)

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

    f = open("zzz", mode="a+", encoding="utf-8")
    f.write("asdf")
    content = f.read()
    print(content)
    f.flush()
    f.close()
    

    八、其他操作

      1. seek(n) 光标移动到n位置,注意,移动的单位是byte

      移动到开头:seek(0)

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

      2. tell() 使用tell() 可以帮我们获取到当前光标在什么位置 

      3. truncate() 截断文件

    九、修改文件

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

    import os
    with open("alex.txt",mode="r",encoding="utf-8") as f1,
        open("alex_副本.txt",mode="w",encoding="utf-8") as f2:
        for line in f1:
            line = line.replace("alex","sb")
            f2.write(line)
    os.remove("alex.txt")
    os.rename("alex_副本.txt","alex.txt")  
    

      

      

      

  • 相关阅读:
    手把手教 从0开始搭建vue 脚手架项目
    利用vue.config.js 配置前端模拟接口技巧
    elementUI 穿梭框应用
    process.env.VUE_APP_BASE_API
    springcloud-Eureka组件
    mysql-常用组件之触发器
    mysql-常用组件之定时器
    springboot-整合多数据源配置
    【搞定面试官】- Synchronized如何实现同步?锁优化?(1)
    【搞定面试官】try中有return,finally还会执行吗?
  • 原文地址:https://www.cnblogs.com/JinMuBaoBao/p/9436835.html
Copyright © 2011-2022 走看看