文件的读写操作

首先介绍一下什么是编码:

1.什么是编码?
编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。
编码有许多中,我们最常用的是 UTF -8编码
2.为什么需要使用编码?
计算机只认识0和1,所以需要将内容翻译成0和1才能保存在计算机中。
同时也需要编码,将计算机保存的0和1,反向翻译回可以识别的内容

文件的打开

对文件的操作,对于同一个文件进行操作,都会继续上一次操作的后面继续操作,例如read函数与readlines函数
打开文件,open函数前面两个参数位置是固定的,后面encoding参数不确定,
所以需要指定名字,否则不会被赋予给前面的值
open("文件路径+文件名/文件名","属性","编码格式")
f = open("D:\\Linux0\\Pycharm\\pythoncode\\228\\data\\test","r",encoding="utf-8")
print(type(f))

读取文件 -文件对象.read(num)  num表示需要读取数据的数量,
若两次调用read函数,第二次的read操作会接上一次的read函数继续读取,并不会从头开始
print(f"读取10个字节的结果是:{f.read(10)}")
readlines()方法:readlines可以按照行的方式把整个文件中的内容进行一次性读取,
并且返回的是一个列表,其中每一行的数据为一个元素
lines = f.readlines() # 读取文件的全部行,封装到列表中
print(f"lines对象的类型是:{type(lines)}")
print(f"lines对象内容是:{lines}")
readlines()方法:一次读取一行数据
line1 = f.readline()
print(f"第一行数据是:{line1}")
用for循环读取每一行数据
for line in f:
    print(f"每一行数据是:{line}")

# 文件的关闭
f.close()
with open 语法打开文件
with open("D:\\Linux0\\Pycharm\\pythoncode\\228\\data\\test","r",encoding="utf-8") as f:
    # print(f.read(10))
    for line in f:
        print(f"每一行数据是:{line}")
f.close()
课后练习,单词计数,通过对文件test1的读取,统计python这个单词出现次数
with open("D:\\Linux0\\Pycharm\\pythoncode\\228\\data\\test1") as f:
    # content = f.read()
    # count = content.count("python")
    # print(f"python出现次数:{count}")
    # print("------------")
    count = 0   # 通过count累积java的数量
    for line in f:
        # 需要替换掉\n  可以用replace 或者strip strip可以去除开头或结尾的空格以及换行符
        line = line.strip()  # 去除开头或结尾的空格以及换行符
        words = line.split(" ")
        print(words)
        for word in words:
            if word == "java":
                count += 1
    print(f"java出现次数:{count}")
f.close()
文件的写入 f.write() 文件的刷新f.flush()
直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
当调用flush的时候,文件会真正写入文件
这样做是避免频繁的操作硬盘,导致效率下降
w模式下,
如果我们所打开的文件不存在时,write会自动为我们创建文件,
若该文件存在时,则里面有内容,会被覆盖
with open("D:\\Linux0\\Pycharm\\pythoncode\\228\\data\\test","w",encoding="utf-8") as f:
    f.write("hello word ")
    f.flush()
    # f.close()  # close方法,内置了flush的功能
    print(f)

 

文件的追加,只需要把模式换为 a 模式就可,这样就不会覆盖原有内容了
with open("D:\\Linux0\\Pycharm\\pythoncode\\228\\data\\test","a",encoding="utf-8") as f:
    f.write("黑马程序员 ")
    f.flush()
    # f.close()  # close方法,内置了flush的功能
    print(f)

 

案列分析
需求: 有一份账单文件,记录了消费收入的具体记录,读取文件,将文件写入bill.txt.bak文件作为备份
同时,将文件内标记为测试的数据丢弃
# 打开文件得到文件对象,准备读取
fr = open("D:\\Linux0\\Pycharm\\pythoncode\\228\\data\\bill","r",encoding="utf-8")
# 打开文件对象,准备写入
fw = open("D:\\Linux0\\Pycharm\\pythoncode\\228\\data\\bill.txt.bak","w",encoding="utf-8")
# 用for循环读取文件
for line in fr:
    line = line.strip()
    # 判断内容,将满足的内容写出
    if line.strip(",")[4] == "测试":
        continue  # continue 进入下一次循环,这一次后面的内容就跳过
    # 将内容写进去
    fw.write(line)
    # 由于前面对内容进行了strip()的操作,所以需要手动的写出换行符
    fw.write("\n")
# close关闭两个文件对象
fr.close()
fw.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值