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(只读)模式

    1.  r

    f=open("水浒传",mode="r",encoding="utf-8")
    s=f.read()
    f.close()     #关闭句柄
    print(s)

        需要注意encoding表示编码集. 根据文件的实际保存编码进行获取数据, 对于我们而言. 更多的是utf-8.

    ../ 返回上一层目录
    f=open("chenwei/chen",mode="r",encoding="utf-8")
    s=f.read()
    print(s)
    f.close()

    2.w

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

    f=open("三国演义",mode="w",encoding="utf-8")
    s=f.write("曹操")
    f.flush()         #曹操
    f.close()
    f=open("三国演义",mode="w",encoding="utf-8")
    s=f.write("刘备")
    f.flush()         #刘备
    f.close()

    3.a

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

    在原来的基础上进行追加内容.
    f=open("三国演义",mode="a",encoding="utf-8")
    f.write("诸葛亮")
    f.flush()         #刘备诸葛亮
    f.close()

    4.rb

    f=open("明星",mode="rb")
    s=f.read()
    print(s.decode("utf-8"))          #解码
    f.close()

    5.wb

    f=open("球星",mode="wb")
    s=f.write("詹姆斯".encode("utf-8"))
    f.close()
    詹姆斯

    6.ab

    f=open("球星",mode="ab")
    s=f.write("保罗".encode("utf-8"))
    f.close()
    詹姆斯保罗

    7.r+

    f=open("老师点名",mode="r+",encoding="utf-8")
    f.write("小明")
    s=f.read()
    f.flush()
    f.close()
    print(s)
    
    李四
    王五
    马六

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

    所以:r+模式, 默认情况下光标在文件的开头, 必须先读, 后写

    f=open("老师点名",mode="r+",encoding="utf-8")
    s=f.read()
    f.write("小明")
    f.flush()
    f.close()
    print(s)
    张三
    李四
    王五
    马六小明
    总结:
    1.在没有任何操作之前进行写. 在开头写

    2. 如果读取了一些内容. 再写, 写入的是最后
    f=open("名言警句",mode="r+",encoding="utf-8")
    s=f.read(3)     #来而不往非礼也,既来之,则安之
    f.flush()
    f.close()
    print(s)  
    来而不      
    
    
    f=open("名言警句",mode="r+",encoding="utf-8")
    f.write("哈哈")
    f.flush()
    f.close()
    哈哈不往非礼也,既来之,则安之
    f=open("名言警句",mode="r+",encoding="utf-8")
    s=f.read(3)             来而不往非礼也,既来之,则安之
    f.write("哈哈")          来而不往非礼也,既来之,则安之哈哈 
    f.flush()
    f.close()
    print(s)  
    来而不
    不管你前面读了几个. 后面去写都是在末尾
    1.在没有任何操作之前进行写. 在开头写
    2.如果读取了一些内容. 再写, 写入的是最后
    f = open("精品", mode="r+", encoding="utf-8")
    f.read(3)
    f.seek(3)   # 移动到xx位置
    # 移动到开头: f.seek(0)  开头
    # 移动到末尾: f.seek(0, 2)   末尾 第二个参数有三个值. 0: 再开头,  1: 在当前, 2: 末尾
    f=open("名言警句",mode="r+",encoding="utf-8")
    f.seek(6)   # 移动6个字节. 2个字
    s = f.read(3)   # 读取3个字
    print(s)
    不往非 来而不往非礼也,既来之,则安之哈哈 f.seek(0) ss
    = f.read(3) print(ss) 来而不
    f=open("名言警句",mode="r+",encoding="utf-8")
    s = f.read()
    f.seek(0)                                      来而不往非礼也,既来之,则安之
    ss= f.read()
    print(s)
    print(ss)
    来而不往非礼也,既来之,则安之
    来而不往非礼也,既来之,则安之

    8.w+

    f=open("篮球",mode="w+",encoding="utf-8")
    f.write("科比")
    f.seek(0)
    s=f.read()
    f.flush()
    f.close()
    科比
    w 操作.会清空原来的内容.  w+是不用的.
    9.a+
    f=open("篮球",mode="a+",encoding="utf-8")
    f.write("姚明")
    f.seek(0)
    s=f.read()
    f.flush()
    f.close()
    科比姚明

    二.文件内容修改

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

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

    import os
    
    with open("玩的",mode="r",encoding="utf-8")as f1,
        open("玩的_副本",mode="w",encoding="utf-8")as f2:
        s=f1.read()
        ss=s.replace("","")
        f2.write(ss)
    os.remove("玩的")
    os.rename("玩的_副本", "玩的")
    台星
    羽毛星
    篮星
    乒乓星
    足星
    排星
    橄榄星
    import os
    
    with open("玩的",mode="r",encoding="utf-8")as f1,
        open("玩的_副本",mode="w",encoding="utf-8")as f2:
        for line in f1:
            s = line.replace("", "")
            f2.write(s)
    os.remove("玩的")
    os.rename("玩的_副本", "玩的")
    台球
    羽毛球
    篮球
    乒乓球
    足球
    排球
    橄榄球
    如何判断这个文件可以进行什么操作
    f = open("球星", mode="r", encoding="UTF-8")
    print(f.readable()) # 判断文件是否可读
    print(f.writable()) # 是否可写入
    True
    False

    f = open("电视", mode="r", encoding="UTF-8")
    l = f.readlines()   # 拿到列表
    for s in l:
        ss = s.strip()  # strip() 去掉空格. 还可以去掉换行符, 制表符
        print(ss)
    print(l)
    f.flush()
    f.close()
    s = "	哈哈哈哈"
    print(s.strip())
    哈哈哈哈
    truncate()

    truncate()
    不给参数. 从文件头.截取到当前位置
    给了参数. 从文件头截取到你给这个参数的位置
    f = open("英雄联盟", mode="r+", encoding="utf-8")
    f.seek(12)                            剑圣剑姬剑魔剑豪德玛火男
    f.truncate()
    剑圣剑姬
    f = open("英雄联盟", mode="r+", encoding="utf-8")
    f.seek(12)                    剑圣剑姬剑魔剑豪德玛火男
    f.truncate(15)  
    f.flush()
    f.close()
    剑圣剑姬剑
    f = open("玩的", mode="r", encoding="utf-8")
    for line in f:  # 每次读取一行. 赋值给前面的line变量
        print(line)
    f.close()
    台球
    
    羽毛球
    
    篮球
    
    乒乓球
    
    足球
    
    排球
    
    橄榄球
     
     
     
     
     








  • 相关阅读:
    Java基础知识强化102:线程间共享数据
    Java(Android)编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)
    Android开发经验01:31个Android开发实战经验
    TCP/IP协议原理与应用笔记19:IP分组的交付和路由选择
    Android 高级UI设计笔记08:Android开发者常用的7款Android UI组件(转载)
    Java(Android)编程思想笔记01:多态性的理解
    Java基础知识强化之集合框架笔记75:哈希表
    重置 linux系统后要配置的基本组件操作
    记一个空格导致的三小时排查
    windows无法启动redis服务,错误码1067
  • 原文地址:https://www.cnblogs.com/chenyibai/p/9295944.html
Copyright © 2011-2022 走看看