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

    今日所得

      文件操作模式的补充

      文件光标的移动控制

      截断文件

      修改文件

      函数的简单介绍

     

    文件操作模式的补充

    """
    r
    w
    a
    将上面的三个模式称为纯净模式
    r+
    w+
    a+
    """
    with open(r'test',mode='r+',encoding='utf-8') as f:
        print(f.readable())
        print(f.writable())
        print(f.readline())  # 'r+'模式比起'r'模式不仅可以读,还可以写入
        f.write('hehehe')
    
    
    with open(r'test',mode='w+',encoding='utf-8') as f:
        print(f.readable())
        print(f.writable())
        print(f.readline())  # 'w+'模式可读可写,但还是会清空文件再写入,没有文件时,会创建一个
        f.write('hehehe')
    
    
    with open(r'test',mode='r+b') as f:
        print(f.readable())
        print(f.writable())  # b模式是以二进制的方式读取的,要想变成我们读的懂得文字需要用.decode来解码
        res = f.read()
        # print(res.decode('utf-8'))
        res1 = str(res,encoding='utf-8')
        print(res1)

     

     

    文件光标的移动控制

      

    """
    f.seek(offset,whence)
    offset:相对偏移量  光标移动的位数
    whence:
        0:参照文件的开头   t和b都可以使用
        1:参照光标所在的当前位置  只能在b模式下用
        2:参照文件的末尾  只能在b模式下使用
    """
    
    with open(r'test','rt',encoding='utf-8') as f:
        print(f.read(1))
        # f.seek(6,0)  # seek移动都是字节数
        # f.seek(4,0)  # seek移动都是字节数
        # print(f.read(1))  # read读取的是字符数
        f.seek(0,0)
        print(f.read(1))
        f.seek(0, 0)
        print(f.read(1))
        f.seek(6,0)
        print(f.read())
    
    
    with open(r'test','rb') as f:
        print(f.read(3).decode('utf-8'))
        f.seek(0,0)
        print(f.read(3).decode('utf-8'))
        f.seek(7,0)
        print(f.read(1).decode('utf-8'))
        # f.seek(6,0)  # seek移动都是字节数
        # f.seek(4,0)  # seek移动都是字节数
    
    
    with open(r'test','r+',encoding='utf-8') as f:
        f.seek(3,0)
        f.write('')  # 写入的字符不会插到俩个字符中间,只会覆盖当前位置的字符
    
    
    with open(r'test','rb') as f:
        print(f.read())
        f.seek(-4,2)  # 从后往前读
        print(f.read().decode('utf-8'))

     

     

    截断文件

    with open(r'test','a',encoding='utf-8') as f:
        f.truncate(6)  # 接收的字节的长度 整型
        # 保留0~6字节数 后面的全部删除(截断)

     

     

    修改文件

    # 修改文件1
    # 先将数据由硬盘读到内存(读文件)
    # 在内存中完成修改(字符串的替换)
    # 再覆盖原来的内容(写文件)
    with open(r'test02.txt','r',encoding='utf-8') as f:
        data = f.read()
        print(data)
        print(type(data))
    
    with open(r'test02.txt','w',encoding='utf-8') as f:
        res = data.replace('egon','jason')
        print(data)
        f.write(res)
    
    """
    优点:任意时间硬盘上只有一个文件 不会占用过多硬盘空间
    缺点:当文件过大的情况下,可能会造成内存溢出
    """
    
    
    
    # 文件修改方式2
    # 创建一个新文件
    # 循环读取老文件内容到内存进行修改  将修改好的内容写到新文件中
    # 将老文件删除  将新文件的名字改成老文件名
    import os
    
    
    with open(r'test02.txt','r',encoding='utf-8') as read_f,
            open(r'test02.swap','a',encoding='utf-8') as write_f:
        for line in read_f:
            new_line = line.replace('jason','egon')
            write_f.write(new_line)
    os.remove('test02.txt')
    os.rename('test02.swap','test02.txt')
    
    
    """
    优点:内存中始终只有一行内容 不占内存
    缺点:再某一时刻硬盘上会同时存在两个文件
    
    """

     

     

    函数的简单介绍

    """
    可以通过变量名找到变量对应的值
    可以通过函数名+括号 找到函数体所对应的代码并执行
    """
    
    
    # 函数名的命名规则跟变量名一模一样
    
    # 函数就是工具,并且函数必须先定义后调用(函数名+括号)
    
    # 函数体代码定义截断只检测语法 不执行代码
    
    
    def my_len():
        n = 0
        for i in s:
            n += 1
        print(n)
    my_len()

     

     

  • 相关阅读:
    负环操作 的队列
    The Prices(有依赖性的状压dp)(去不同商店买东西先花不同路费)
    BFS
    滚动数组(细节)(坑点)
    P1908 逆序对(细节)(树状数组解法)
    head
    DaoVoice JS 代码接入示例
    DaoVoice JS 代码接入示例
    DaoVoice JS 代码接入示例
    DaoVoice JS 代码接入示例
  • 原文地址:https://www.cnblogs.com/AbrahamChen/p/11151996.html
Copyright © 2011-2022 走看看