• python 文件操作


    本节主要内容:
    1. 初识⽂文件操作
    2. 只读(r, rb)
    3. 只写(w, wb)
    4. 追加(a, ab)
    5. r+读写
    6. w+写读
    7. a+写读(追加写读)
    8. 其他操作⽅方法
    9. ⽂文件的修改以及另⼀一种打开⽂文件句句柄的⽅方式

    一初识文件操作

    使⽤用python来读写⽂文件是⾮非常简单的操作. 我们使⽤用open()函数来打开⼀一个⽂文件, 获取到⽂文
    件句句柄. 然后通过⽂文件句句柄就可以进⾏行行各种各样的操作了了. 根据打开⽅方式的不同能够执⾏行行的操
    作也会有相应的差异.
    打开⽂文件的⽅方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使⽤用的是r(只读)模式

    二只读操作

    r 模式和rb模式

    f = open('护士少妇嫩模.txt',mode='r',encoding='utf-8')#文件存储的地方,模式,编码模式
    content = f.read()#read需要返回值,注意read输入字符长度,换行也算一个字节
    print(content)
    f.close()#使用这种模式必须要加close,fulsh.
    
    f = open('护士少妇嫩模',mode='rb')#b模式下不需要加编码模式
    content = f.read()
    print(content)
    f.close()
    

    绝对路径:从磁盘根目录开始寻找

    相对路径:同一文件下的寻找,可以是以此文件夹为基础,进行上下级的获取. 推荐使用

    read readline readlines 读取几个字节 读取一行 全部读取     外加for循环,推荐for循环

    f = open('a4',mode='r',encoding='utf-8')
    content = f.read()#默认全部度取,加数字为几个字节
    print()
    
    f = open('a4',mode='r',encoding='utf-8')
    f1 = f.readline()#读取几行
    print(f1)
    
    f = open('a4',mode='r',encoding='utf-8')
    f1 = f.readlines()#全部读取,为列表
    print(f1)
    
    f = open('a4',mode='r',encoding='utf-8')
    for s in f:
        print(s)#推荐使用
    

    三 写 模式

    w wb

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

    f = open('小娃娃',mode='w',encoding='utf-8')
    f.write('金毛狮王')
    f.flush()
    
    f = open('小娃娃',mode='wb')
    f.write('金毛狮王'.encode('utf-8'))
    f.flush()
    f.close()
    

    四追加模式

    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和a+ 

    f = open("⼩小娃娃", mode="w+", encoding="utf-8")
    f.write("哈哈")
    content = f.read()
    print(content)
    f.flush()
    f.close()
    
    
    
    
    
    
    
    f = open("⼩小娃娃", mode="a+", encoding="utf-8")
    f.write("⻢马化腾")
    content = f.read()
    print(content)
    f.flush()
    f.close()
    

      其他操作

    seek    tell     truncate

    1. seek(n) 光标移动到n位置, 注意, 移动的单位是byte. 所以如果是UTF-8的中⽂文部分要
    是3的倍数.
    通常我们使⽤用seek都是移动到开头或者结尾.
    移动到开头: seek(0)
    移动到结尾: seek(0,2) seek的第⼆二个参数表⽰示的是从哪个位置进⾏行行偏移, 默认是0, 表
    ⽰示开头, 1表⽰示当前位置, 2表⽰示结尾

    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('张国荣')
    f.flush()
    f.close()
    

      

    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
    print(f.tell()) # 光标位置9
    f.flush()
    f.close()
    

      

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

    深坑请注意: 在r+模式下. 如果读取了了内容. 不论读取内容多少. 光标显⽰示的是多少. 再写入
    或者操作⽂文件的时候都是在结尾进⾏行行的操作.所以如果想做截断操作. 记住了了. 要先挪动光标. 挪动到你想要截断的位置. 然后再进⾏行行截断
    关于truncate(n), 如果给出了了n. 则从开头开头进⾏行行截断, 如果不给n, 则从当前位置截断. 后⾯面
    的内容将会被删除

     修改文件

    # ⽂文件修改
    import os
    with open("⼩小娃娃", mode="r", encoding="utf-8") as f1,
    open("⼩小娃娃_new", mode="w", encoding="UTF-8") as f2:
    content = f1.read()
    new_content = content.replace("冰糖葫芦", "⼤大⽩白梨梨")
    f2.write(new_content)
    os.remove("⼩小娃娃") # 删除源⽂文件
    os.rename("⼩小娃娃_new", "⼩小娃娃")
    

      

    #弊端: ⼀一次将所有内容进⾏行行读取. 内存溢出. 解决⽅方案: ⼀一⾏行行⼀一⾏行行的读取和操作
    import os
    with open("⼩小娃娃", mode="r", encoding="utf-8") as f1,
    open("⼩小娃娃_new", mode="w", encoding="UTF-8") as f2:
    for line in f1:
    new_line = line.replace("⼤大⽩白梨梨", "冰糖葫芦")
    f2.write(new_line)
    os.remove("⼩小娃娃") # 删除源⽂文件
    os.rename("⼩小娃娃_new", "⼩小娃娃") # 重命名新⽂文件
    

      

      

     

  • 相关阅读:
    Ms SQL 2K SP4 is avaialable!
    TSQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst、语言版本影响!
    编程将 .Net Assembly 里的类注册成 COM 类
    一个 TreeView 的派生类: TreeViewEx 实现 NodeShowToolTip、NodeDoubleClick 事件
    也谈 尉迟方 遇到的面试题! 参阅"装配脑袋" 实现"就地正法 in place"! 考察的是"栈"的思想!
    这几句 SQL 比较长! 没啥实用价值,但也要费费脑子! 权当习题: 《TSQL 生成公历年历》,仅供收藏!
    妙用 TSQL: PARSENAME 函数 (也可不使用该函数,鸣谢"小杰") 实现按指定分隔符拆分字符串 SplitString
    使数据库大字段的 Server Side ASP.Net Web/Http 下载,支持 FlashGet (Client) 断点续传多线程下载
    ArcGIS 的 http://localhost:8399/arcgis/rest/services 无法打开,显示404 的解决办法
    svn工作拷贝之降级
  • 原文地址:https://www.cnblogs.com/lnrick/p/9160244.html
Copyright © 2020-2023  润新知