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)
    李清照
    昨夜雨疏风骤,浓睡不消残酒。
    试问卷帘人,却道海棠依旧。这是插入的内容
    知否,知否,应是绿肥红瘦。
  • 相关阅读:
    字的传送
    mov 寄存器,段寄存器
    c语言中利用三维数组计算成绩总分数
    python中break语句
    c语言中求课程总分、平均分。学生总分及平均分
    python中assert语句
    python中random模块引入随机数
    python中实现列表的倒序排列
    c语言中求两个矩阵的乘积
    python的严格缩进可以避免else悬挂
  • 原文地址:https://www.cnblogs.com/py-peng/p/10739865.html
Copyright © 2011-2022 走看看