文件处理二及函数

一.文件模式补充

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
原文地址:https://www.cnblogs.com/Cpsyche/p/11153929.html