python基础学习笔记第七章——文件操作
一、文件的编码1. 编码概念编码是内容和二进制间相互转换的规则集合由于计算机仅识别0和1所以需通过编码将文本转二进制存储也需编码将二进制转回可识别内容。不同编码的转换规则不同使用错误编码读写文件会导致内容乱码。2. 常见编码UTF-8全球通用编码推荐优先使用GBK主要用于中文简体环境Big5主要用于中文繁体环境3. 查看文件编码Windows系统可通过记事本打开文件在底部状态栏查看编码格式。二、文件的基本操作1. 文件操作核心步骤打开文件读写/追加文件关闭文件可仅打开并关闭文件不执行读写操作2. 打开文件open()函数语法open(name, mode, encoding)name文件路径字符串可含绝对/相对路径mode文件打开模式只读r、写入w、追加aencoding编码格式关键字参数推荐UTF-8示例# 以只读模式打开python.txt编码为UTF-8 f open(python.txt, r, encodingUTF-8)注意f为文件对象是Python特殊数据类型后续通过该对象执行文件操作。3. 常用打开模式模式描述r只读文件指针在开头默认模式文件不存在则报错w只写文件不存在则创建文件存在则清空原有内容a追加文件不存在则创建新内容写在原有内容之后三、文件的读取1. 核心读取方法1read(num)读取指定字节数num可选指定读取字节数不指定则读取全部内容f open(python.txt, r, encodingUTF-8) # 读取10个字节 content1 f.read(10) # 读取剩余全部内容 content2 f.read() f.close() print(content1, content2)2readline()一次读取一行内容f open(python.txt, r, encodingUTF-8) # 读取第一行 line1 f.readline() # 读取第二行 line2 f.readline() f.close() print(f第一行{line1}) print(f第二行{line2})3readlines()读取全部行返回列表每行是一个元素f open(python.txt, r, encodingUTF-8) # 得到列表元素含换行符\n content f.readlines() f.close() print(content) # 示例[hello world\n, python\n, itheima\n]4for循环读取逐行读取高效省内存# 直接遍历文件对象每次循环得到一行内容 for line in open(python.txt, r, encodingUTF-8): print(line)2. 关闭文件close()释放文件占用若不关闭程序运行时文件会被Python持续占用。f open(python.txt, r, encodingUTF-8) content f.read() # 必须关闭文件 f.close()3. 自动关闭with open语法无需手动调用close()代码块执行完自动关闭文件推荐使用f open(python.txt, r, encodingUTF-8) content f.read() # 必须关闭文件 f.close()4. 读取练习单词计数需求读取word.txt统计itheima出现的次数word.txt内容itheima itcast python itheima python itcast beijing shanghai itheima shenzhen guangzhou itheima wuhan hangzhou itheima zhengzhou bigdata itheima实现代码# 初始化计数器 count 0 # 打开文件逐行读取 with open(word.txt, r, encodingUTF-8) as f: for line in f: # 去除行尾换行符按空格分割成单词列表 strip () 去首尾空白 split () 按符号切分数据 words line.strip().split() # 遍历单词统计itheima for word in words: if word itheima: count 1 print(fitheima出现的次数{count}) # 结果6四、文件的写入1. 核心语法使用w模式打开文件通过write()写入内容flush()刷新到硬盘避免缓冲区积压。# 1. 以w模式打开文件不存在则创建存在则清空 f open(python.txt, w, encodingUTF-8) # 2. 写入内容仅存于缓冲区未真正写入文件 f.write(hello world\nI love Python) # 3. 刷新缓冲区内容写入硬盘 f.flush() # 4. 关闭文件close自带flush功能可省略flush f.close()2. 简化写法with openwith open(python.txt, w, encodingUTF-8) as f: f.write(hello world\nI love Python) # 自动close自带flush无需手动操作3. 注意事项w模式下文件不存在自动创建文件存在清空原有内容写入的内容必须是字符串数字需先通过str()转换五、文件的追加1. 核心语法使用a模式打开文件写入方法与w模式一致新内容追加在文件末尾。# 以a模式打开文件不存在则创建存在则追加 with open(python.txt, a, encodingUTF-8) as f: # 追加内容\n实现换行 f.write(\n这是追加的内容)2. 注意事项a模式下文件指针默认在文件末尾始终追加写入可通过\n实现换行追加避免内容连在一起同样支持write()和flush()close()自带flush功能六、文件操作综合案例账单备份与数据过滤1. 需求读取bill.txt账单文件备份文件到bill.txt.bak过滤掉标记为测试的行仅保留正式行写入备份文件2. 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,消费,正式3. 实现代码# 打开原文件读和备份文件写同时操作 with open(bill.txt, r, encodingUTF-8) as f_read, open(bill.txt.bak, w, encodingUTF-8) as f_write: # 逐行读取原文件 for line in f_read: # 去除行尾换行符按逗号分割 line_list line.strip().split(,) # 判断是否为测试行最后一列是remarks if line_list[-1] 测试: # 跳过测试行 continue # 正式行写入备份文件保留原换行符 f_write.write(line) print(账单备份并过滤完成备份文件bill.txt.bak)七、核心知识点总结编码优先使用UTF-8避免文件乱码文件操作三步骤打开→操作→关闭推荐with open自动关闭三种核心模式r读、w写清空、a追加读取方法read()、readline()、readlines()、for循环推荐写入/追加write()写入内容flush()刷新硬盘close()自带flushw和a模式文件不存在自动创建w清空原有内容a追加末尾。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2432335.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!