Python文件操作
一、文件的编码
二、文件的读取
1、操作汇总
2、model 常用的三种基础访问模式
三、文件的写入
四、文件的追加
五、综合案例
一、文件的编码
1、什么是编码?
- 编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。
- 编码有许多中,我们最常用的是UTF-8编码
2、为什么要使用编码?
- 计算机只认识0和1,所以需要将内容翻译成0和1才能保存在计算机中
- 同时也需要编码, 将计算机保存的0和1,反向翻译回可以识别的内容
二、文件的读取
1、操作汇总
- name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
- mode:设置打开文件的模式(访问模式):只读、写入、追加等。
- encoding:编码格式(推荐使用UTF-8)
- 多次调用时,会在上一个结尾处继续读取
2、model 常用的三种基础访问模式
练习题
通过Windows的文本编辑器软件,将如下内容,复制并保存到,文件可以存储在任意位置
beijing shanghai CSDN shenzhen guangzhou CSDN wuhan hangzhou CSDN zhengzhou bigdata CSDN
通过文件读取操作,读取此文件,统计CSDN单词出现的次数
代码示例
# 练习 # 打开文件,以读取模式打开 f = open("F:/学习资料/Python/黑马/资料/test1.txt", "r", encoding="UTF-8") # 方式1:读取全部内容,通过字符串count方法计数 content = f.read() count = content.count("CSDN") print(count) # 4 # 方式2:一行一行读取,判断出现次数并累计 count = 0 for line in f: line = line.strip() # 去除开头结尾空格和换行符 words = line.split(' ') for word in words: if word == 'CSDN': count += 1 print(count) # 4 # 关闭文件 f.close()
三、文件的写入
- 直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
- 当调用flush()的时候,内容会真正写入文件
- close()方法,带有flush()方法的功能,这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)
- 文件如果不存在,使用”w”模式,会创建新文件
- 文件如果存在,使用”w”模式,会将原有内容清空
代码示例
# 文件的写入 w # 存在,清空重写 不存在,新建文件,写入 f = open("F:/学习资料/Python/黑马/资料/test1.txt", "w", encoding="UTF-8") f.write('hello world') # 内容写入到内存中 # flush刷新 f.flush() # 关闭文件 f.close()
四、文件的追加
- a模式,文件不存在会创建文件
- a模式,文件存在会在最后,追加写入文件
- 可以使用”\n”来写出换行符
代码示例
# 文件的追加 a模式 f = open("F:/学习资料/Python/黑马/资料/test1.txt", "a", encoding="UTF-8") f.write('\n欢迎来到csdn') # 换行追加 # flush刷新 f.flush() # 关闭文件 f.close()
追加前
追加后
五、综合案例
练习题
有一份账单文件,记录了消费收入的具体记录,内容如下,可以将内容复制并保存为 bill.txt文件
name, date,money, type, remarks 周杰轮,2022-01-01,100000,消费,正式 周杰轮,2022-01-02,300000,收入,正式 周杰轮,2022-01-03,100000,消费,测试 林俊节,2022-01-01,300000,收入,正式 林俊节,2022-01-02,100000,消费,测试 林俊节,2022-01-03,100000,消费,正式 林俊节,2022-01-04,100000,消费,测试 林俊节,2022-01-05,500000,收入,正式 张学油,2022-01-01,100000,消费,正式 张学油,2022-01-02,500000,收入,正式 张学油,2022-01-03,900000,收入,测试 王力鸿,2022-01-01,500000,消费,正式 王力鸿,2022-01-02,300000,消费,测试 王力鸿,2022-01-03,950000,收入,正式 刘德滑,2022-01-01,300000,消费,测试 刘德滑,2022-01-02,100000,消费,正式 刘德滑,2022-01-03,300000,消费,正式
代码示例
# 综合案例 # 打开文件得到文件对象,准备读取 fr = open("F:/学习资料/Python/黑马/资料/bill.txt", "r", encoding="UTF-8") # 打开文件得到文件对象,准备写入 fw = open("F:/学习资料/Python/黑马/资料/bill.txt.bak", "w", encoding="UTF-8") # for循环读取文件 for line in fr: line = line.strip() # 去除开头结尾空格和换行符 # 判断内容,将满足的内容写出 if line.split(',')[4] == '测试': continue # 将内容写出去 fw.write(line) # 由于前面进行了strip操作,需要手动换行 fw.write('\n') # close两个文件对象 fr.close() fw.close() # 写出文件调用close(),会自动flush()
输出