zoukankan      html  css  js  c++  java
  • python 文件处理

    模式种类

    r     打开只读文件,该文件必须存在。 

    r+   打开可读写的文件,该文件必须存在。

    rb   以二进制读取

    w   打开只写文件,若文件存则全部清空,若文件不存在则建立该文件。 

    w+      打开可读写文件,若文件存则全部清空,若文件不存在则建立该文件。 

    wb    以二进制写入

    a   附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,后面添加

    a+    附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,后面添加,读取的时候也是从后面开始读

    ab  以二进制附加

    demo.txt

    
    
    昨夜雨疏风骤,浓睡不消残酒。
    试问卷帘人,却道海棠依旧。
    知否,知否,应是绿肥红瘦。

    用法

    readline()  读取一行

    with open("demo.txt","r",encoding="utf-8") as f:
        print(f.readline())
        print(f.readline())

    结果:

    昨夜雨疏风骤,浓睡不消残酒。

    试问卷帘人,却道海棠依旧。

    他会根据当前的光标继续向下

    readlines()  读取多行

    with open("demo.txt","r",encoding="utf-8") as f:
        print(f.readlines())

    结果:

    ['昨夜雨疏风骤,浓睡不消残酒。 ', '试问卷帘人,却道海棠依旧。 ', '知否,知否,应是绿肥红瘦。']

    以列表形式返回

    但这样存储,会占相应的内存

    tell()  获取当前光标位置

    with open("demo.txt","r+",encoding="utf-8") as f:
        print(f.tell())  # 0
        read = f.read(1)
        print(f.tell())  # 3

     一个中文占3个字节,所以读取一个字符,光标是 3

    seek()  调整光标位置

    with open("demo.txt","r+",encoding="utf-8") as f:
        r = f.readline()
        print(r.strip()) # 昨夜雨疏风骤,浓睡不消残酒。
        print(f.tell()) # 44
        
        f.seek(0)
        r = f.readline() 
        print(r.strip()) # 昨夜雨疏风骤,浓睡不消残酒。

    flush()  更新

    将缓存里的数据转到磁盘

    进度条:

    因为终端也是一个文件,也可以调用 flush()

    import sys
    import time
    for i in range(20):
        # 操作终端
        sys.stdout.write("*")
        # 将缓存的数据更新到终端
        sys.stdout.flush()
        time.sleep(0.1)

    truncate()  截断

    参数(保留的字节数),不写参数会截断所有

    with open("demo.txt","a",encoding="utf-8") as f:
        f.truncate(12) # 昨夜雨疏

    截断12个字节,却只有4个字符,因为一个中文占3个字节

    其他操作

       # 是否是终端
        print(f.isatty())
        # 是否可读
        print(f.readable())
        # 是否可写
        print(f.writable())

    内存处理

    with open("demo.txt","r+",encoding="utf-8") as f:
    
    # 这是for内部将f对象做成一个迭代器,用的时候一行一行的取
        for i in f: 
            print(i.strip())

    更新文件

    最好的方法就是,再写一份

    with open("demo.txt","r",encoding="utf-8") as f,open("demo备份.txt","w",encoding="utf-8") as n:
            n.write("李清照
    ")
            num = 0
            for i in f:
                num += 1
                if  num == 2:
                    i = "".join([i.strip(),("这是插入的内容
    ")])
                n.write(i)
    李清照
    昨夜雨疏风骤,浓睡不消残酒。
    试问卷帘人,却道海棠依旧。这是插入的内容
    知否,知否,应是绿肥红瘦。
  • 相关阅读:
    JSDeferred 源码分析
    前端MVVM框架avalon揭秘
    前端MVVM框架avalon揭秘
    轻量级前端MVVM框架avalon源码分析-总结
    JavaScript 中介者模式与观察者模式有何不同?
    Knockout 新版应用开发教程之"text"绑定
    Knockout 新版应用开发教程之"visible"绑定
    Knockout 新版应用开发教程之Observable Arrays
    设计模式之美:Decorator(装饰)
    设计模式之美:Composite(组合)
  • 原文地址:https://www.cnblogs.com/py-peng/p/10739865.html
Copyright © 2011-2022 走看看