zoukankan      html  css  js  c++  java
  • 文件处理二及函数

    一.文件模式补充

    r+  不会创建文件的可读可写

    with open("a.txt", 'r+', encoding="utf-8") as f :
        print(f.readable())
        print(f.writable())
        print(f.readline())
        print(f.write("zazaza"))
    View Code

    w+  创建清空文件的可读可写

    with open("a.txt", 'w+', encoding="utf-8") as f :
        print(f.readable())
        print(f.writable())
        print(f.readline())
        print(f.write("zazaza"))
    View Code

    a+ 创建不清空文件(追加)的可读可写

    with open("a.txt", 'a+', encoding="utf-8") as f :
        print(f.readable())
        print(f.writable())
        f.seek(0,0)
        print(f.readline())  # 光标在末尾
        print(f.write("zazaza
    "))
    View Code

    二.光标移动

    光标f.seek(offset,whence)

    offset:相对偏移量 光标移动的位数

    whence: 0:参照文件的开头 t和b都可以使用

        1:参照光标所在的当前位置 只能在b模式下用

        2:参照文件的末尾 只能在b模式下使用

    with open("a.txt", 'rb') as f :
        print(f.read(3).decode("utf-8"))
        f.readline()
        f.seek(0,1)
        f.read(2)
        f.seek(-4,2)
        print(f.read(2))
    View Code

    三.检测文件内容的变化及截断函数

    将光标移动的文件的末尾

    可以通过seek来进行光标移动,也可以通过a+b直接把光标定位到末尾

    让后通过while循环,把光标之后的内容赋值,非空就打印出来

    with open(r'a.txt','a+b') as f:
        # 先将光标移动到文件末尾
        # f.seek(0,2)
        while True:
            res = f.readline()
            
            print(f.tell())  # 查看光标移动了多少位 bytes
            if res:
                print("新增的文件内容:%s"%res.decode('utf-8'))
    View Code

    truncate截断函数:把指定长度后面的文件内容删除

    with open("a.txt", 'a+', encoding="utf-8") as f :
        f.truncate(10)
    View Code

    四.修改文件的两种方式

    修改文件
      先将数据由硬盘读到内存(读文件)
      在内存中完成修改(字符串的替换)
      再覆盖原来的内容(写文件)

    with open(r"a.txt", "rt",encoding="utf-8") as f :
        str1 = f.read().upper().replace("","")
    
    with open(r"a.txt", "wt",encoding="utf-8") as f :
        f.write(str1)
    View Code

    优点:任意时间硬盘上只有一个文件 不会占用过多硬盘空间
    缺点:当文件过大的情况下,可能会造成内存溢出

    文件修改方式2
      创建一个新文件
      循环读取老文件内容到内存进行修改 将修改好的内容写到新文件中
      将老文件删除 将新文件的名字改成老文件名

    import os
    
    
    with open(r"a.txt", "rt",encoding="utf-8") as f,
        open(r"a.swap","at",encoding="utf-8") as write_f :
    
        for line in f :
            str1 = line.replace("",'')
            str1 = str1.lower()
            write_f.write(str1)
    
    os.remove("a.txt")
    os.rename("a.swap","a.txt")
    View Code

    优点:内存中始终只有一行内容 不占内存
    缺点:再某一时刻硬盘上会同时存在两个文件

    五.函数简介

    函数:  (1)重复利用的工具

            (2)可以完成特定功能的代码块,函数就是存放代码块的容器

    函数必须先声明再调用(函数名+括号)。

    函数包括四部分

           1. 函数名:使用该函数的依据 (函数名的命名规则跟变量名一模一样)

           2. 函数体:完成功能的代码块(函数体代码定义截断只检测语法 不执行代码)

           3. 返回值:功能完成的反馈结果

           4. 参数:完成功能需要的条件信息

    def my_max(x,y) :
        if x > y :
            return x
        else :return y
    
    
    print(my_max(my_max(3,2),1))
    View Code
  • 相关阅读:
    set, unordered_set模板类
    C/C++ Bug记录
    win10远程连接
    C/C++缓冲区刷新问题
    hihocoder1711 评论框排版[并查集+set]
    makefile
    Virtual Table
    粤语
    xilinx SDK开发 GPIO使用API总结
    基于zynq 7020的串口UART中断实验
  • 原文地址:https://www.cnblogs.com/Cpsyche/p/11153929.html
Copyright © 2011-2022 走看看