Python read + write + with 简记

 Base

# -*- coding:utf8 -*-
"""
# editor: hjjdreamer
# create-time: 2023/4/13-7:04
# Python-Script: 30_files_py.py
# describe:
Python 需要经过文件管家的一个介质进行系统中文件的读取
Python --> 文件管家的媒介 --> 系统文件

mode:
r == 读取,不存在文件则报错
a == 追加内容
w == 覆盖写入
b == 二进制模式打开(图片 + 视频)
"""

"""
open 读取文件(打开)
"""
# 读取文件(打开)
# open(文件的路径, mode="<打开方式: r读取 + w覆盖写入 + a追加>")
# file_object 相当于媒介一个文件管家
fr = open(r"./demo.log", mode="r")

# 文件操作
"""
read() 查看文件的功能
按字符,文件指针从头读到尾
"""
# 读取文件中前5个字符并输出
print(fr.read(5))

# 不会从头接着读,而是接着往后读取
print(fr.read(3))

# 文件指针标记文件从哪个位置开始读取数据
# fr.read() 读取所有内容(当前指针位置到文件末尾)
print(fr.read())

# 关闭资源
fr.close()

"""
# readline()按行读取文件
"""
# 打开文件:
frl = open(r"./myapp.log", mode="r")
# 按行读取文件
print(frl.readline())  # 读取第一行数据
# 文件中有换行符(\n) + print默认也是换行符
print(frl.readline(), end="")  # 读取第二行数据
# 修改print的默认换行符
print(frl.readline(), end="")
# 关闭文件
frl.close()

"""
readlines()
读取所有(剩余)行然后把他们作为一个 “字符串列表” 返回
和 while, for 循环结合使用
按行,文件指针从头读到尾
"""
# 打开文件
fr1 = open(r"./myapp.log", mode="r")
data1 = fr1.readlines()
print(f"{data1}")
print(f"{data1[0]}")
print(f"{data1[2]}")

# 和 split()结合
print(f"{data1[1].split(':')[0]}")
print(f"{data1[1].split(':')[2]}")

# 和 for 循环
for item in data1:
    print("===")
    print(f"num: {item}", end="")
    print("-=-=-=-")
    print("num: ", item, end="")
    print("----")
    print(f"{fr1.readlines()}")


# 关闭文件
fr1.close()


"""
大批量数据的读取方法
"""
# 打开文件
frm = open(r"./addDemo.log", mode="r")
# 读取文件 == while True

"""
123
456
"\n" ==> 换行符,不会终止循环 ==> len("\n")=1
789
"""
while True:
    # 一行一行接受数据
    data = frm.readline()
    # 表示读取那一行为空字符,则标记着文件读取完成
    # len() 返回字符串的长度
    if len(data) == 0:  # 表示文件读取完毕
        break   # 退出循环
    # 输出行
    print(f"data = {data}")

# 关闭资源
frm.close()

"""
数据的写入
write
writelines
"""
# 打开文件
fw = open(r"./write_file.txt", mode="w")     # w: write 写入

# 文件写入,字符串写入,覆盖写入
fw.write("hello benben~~\n")
fw.write("you are my baby boy~ ~\n")

# 关闭资源
fw.close()

"""
写入操作按列
"""
# 列表写入 + 换行符要写,否则会写成一行
list01 = ["hello\n", "world\n", "hehe\n"]
# 打开文件
fwl = open("./writelines_file.txt", mode="w")
# 写入文件,覆盖写入
fwl.writelines(list01)
# 保存
fwl.close()

"""
案例
mode="rb"
mode="ab"
"""

# 同时打开2个文件系统
fr1 = open(r"./write_file.txt", mode="rb")
fw1 = open(r"./writelines_file.txt", mode="ab")
# 循环判断写入,按字节模式而不是内容
while True:
    data = fr1.read(4096)   # 4KB为一次写入
    # 读取完成的判断
    if len(data) == 0:      # 文件读取完毕
        break               # 退出循环
    # 写入数据
    fw1.write(data)
fw1.close()
fr1.close()

# 文件简写
"""
with 的简写 ==> 优化掉close()操作,简化了写法
"""
# 打开的文件放到with语句中,代码结束后,文件将自动关闭
with open(r"./writelines_file.txt", mode="ab") as fw2:
    with open(r"./write_file.txt", mode="rb") as fr2:
        while True:
            data2 = fr2.read(4096)
            if len(data2) == 0:
                break
            fw2.write(data2)

def func + sys module结合

# 与函数定义结合
def copy1(from1, to1):

    print(f"from1 = {from1}")
    print(f"to1 = {to1}")

    with open(f"{to1}", mode="ab") as fw3:
        with open(f"{from1}", mode="rb") as fr3:
            while True:
                data3 = fr3.read(4096)
                if len(data3) == 0:
                    break
                fw3.write(data3)


copy1(f"./writelines_file.txt", f"./write_file.txt")


import sys
copy1(sys.argv[1], sys.argv[2]) # 调用函数+使用sys module 传递系统变量

猜你喜欢

转载自blog.csdn.net/m0_59267075/article/details/130166774