首先介绍一下什么是编码:
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()