当前位置: 首页 > news >正文

【I/O编程与异常】文件操作补全程序题

题目1:基础文本读取(r模式)

补全程序,读取文本文件的前2行并打印(去除每行首尾空格):

# 文件content.txt内容:
#  第一行:Python文件操作  
#  第二行:基础模式练习  
#  第三行:进阶技巧  with open("content.txt", "____") as f:________

答案

with open("content.txt", "r") as f:print(f.readline().strip())  # 读取第一行并去空格print(f.readline().strip())  # 读取第二行并去空格

解析r为默认文本只读模式,readline()逐行读取,strip()清除首尾空格(包括换行符),符合“打印有效内容”的需求。

题目2:二进制文件读取(rb模式)

补全程序,读取图片文件的前10字节(文件标识头,用于验证文件类型):

# 读取图片文件的前10字节(如PNG文件标识头为b'\x89PNG\r\n\x1a\n')
try:with open("image.png", "____") as f:____  # 读取前10字节print(f"文件标识头:{header.hex()}")  # 以十六进制打印
except FileNotFoundError:print("文件不存在")

答案

try:with open("image.png", "rb") as f:header = f.read(10)  # 读取前10字节(bytes类型)print(f"文件标识头:{header.hex()}")
except FileNotFoundError:print("文件不存在")

解析:图片为二进制文件,必须用rb模式;read(10)返回bytes类型,hex()转换为十六进制便于查看文件标识(如PNG/JPG的特征头)。

题目3:追加日志并读取(a+模式)

补全程序,向日志文件追加一条操作记录后,读取并打印最新的3条日志:

import time# 日志格式:[时:分:秒] 操作描述
new_log = f"[{time.strftime('%H:%M:%S')}] 用户退出\n"with open("system.log", "____") as f:____  # 追加新日志____  # 移动指针到文件开头(准备读取)# 读取所有行,取最后3条all_lines = f.readlines()latest_3 = all_lines[-3:] if len(all_lines)>=3 else all_linesprint("最新3条日志:")for line in latest_3:print(line.strip())

答案

with open("system.log", "a+") as f:f.write(new_log)  # 追加新日志到末尾f.seek(0)  # 移动指针到开头,否则readlines()返回空all_lines = f.readlines()# 后续代码不变

解析a+模式支持“追加+读取”,但write()后指针默认在末尾,必须用seek(0)移到开头才能读取全部内容;readlines()返回所有行的列表,取后3条即为最新记录。

题目4:修改文件指定行(r+模式)

补全程序,将文件第2行(索引1)的内容修改为“2. 修改后的内容”:

# 文件info.txt原始内容:
# 1. 初始行
# 2. 待修改行
# 3. 末尾行with open("info.txt", "____") as f:# 读取所有行到列表(便于修改)lines = f.readlines()# 确保文件至少有2行再修改if len(lines) >= 2:lines[1] = "2. 修改后的内容\n"  # 替换第2行# 移动指针到文件开头(准备重写)____# 清空原有内容(从当前指针位置截断)f.truncate()  # 截断文件—— 简单说就是「从指定位置开始,删除文件后续所有内容,只保留该位置之前的部分」(避免原内容残留)# 写入修改后的所有行f.writelines(lines)

答案

with open("info.txt", "r+") as f:lines = f.readlines()if len(lines) >= 2:lines[1] = "2. 修改后的内容\n"f.seek(0)  # 移到开头,确保从首字节开始重写f.truncate()  # 截断文件—— 简单说就是「从指定位置开始,删除文件后续所有内容,只保留该位置之前的部分」(避免原内容残留)f.writelines(lines)

解析r+模式支持读写且保留原内容,适合“先读后改”;truncate()必须在seek(0)后调用,否则会从读取后的指针位置(末尾)截断,导致原内容无法清空。

题目5:大文件复制(rb/wb模式)

补全程序,分块复制大文件(每次读取1MB,避免占用过多内存):

# 复制大文件(如zip压缩包,大小可能超过内存)
source = "large_file.zip"
dest = "backup.zip"
chunk_size = 1024 * 1024  # 1MB/块with open(source, "____") as src_file, open(dest, "____") as dst_file:while True:____  # 读取一块数据if not chunk:  # 读取到空,说明文件结束break____  # 写入这一块数据到目标文件

答案

with open(source, "rb") as src_file, open(dest, "wb") as dst_file:while True:chunk = src_file.read(chunk_size)  # 读取1MB二进制数据if not chunk:breakdst_file.write(chunk)  # 写入二进制数据

解析:非文本文件必须用二进制模式(rb读/wb写);分块读写(read(chunk_size))是处理大文件的标准方式,避免一次性加载整个文件到内存(导致内存溢出)。

题目6:统计文件有效行数(r模式)

补全程序,统计文本文件中“非空且非纯空格”的行数:

# 统计有效行数:忽略空行和仅含空格的行
valid_count = 0with open("data.txt", "____") as f:____  # 遍历文件的每一行# 判断是否为有效行(去除空格后不为空)if line.strip():valid_count += 1print(f"有效行数:{valid_count}")

答案

valid_count = 0with open("data.txt", "r") as f:for line in f:  # 逐行迭代(内存友好,无需一次性读所有行)if line.strip():valid_count += 1print(f"有效行数:{valid_count}")

解析for line in f是遍历文本文件的高效方式(逐行读取,不占用大量内存);strip()会去除首尾空格和换行符,若结果非空,则为有效行。

http://www.rkmt.cn/news/54717.html

相关文章:

  • 应用安全 --- 看门狗函数
  • LaTeX Beamer自动分页
  • 高精度进制转换
  • AI元人文:赋能技术人文深度融合的法治新范式
  • [K8s/资源调度] Vocano : 开源的 Kubernetes 批处理系统
  • 2025 Super MB Pro M6+ PRO: BENZ BMW 2-in-1 Diagnostic Tool with Panasonic FZ-G1 Tablet Ready to Use
  • 11.19 p1115最大字段和
  • 20232419 2025-2026-1 《网络与系统攻防技术》实验六实验报告
  • 22年副省daan
  • 第30天(中等题 二分查找)
  • 腾讯云ubuntu服务器初始化
  • 现实的一切,都是自指自洽的道德因果逻辑态
  • Firefox扩展界面优化与浏览器技术更新
  • 11月19日日记
  • 代码随想录Day15_二叉树
  • 什么是代币?从ERC-20开始 - all-in
  • Yanhua Mini ACDP-2 BMW CAS Package: Advanced CAS ISN Module Programming for N20/N55/B38
  • 发布与订阅者模式-复盘
  • 20232307 2025-2026-1 《网络与系统攻防技术》实验七实验报告
  • 《R语言医学数据分析实战》学习记录--第一章 R语言介绍
  • 李克特量表(Likert scale)
  • java---maven
  • 状语从句学案
  • 用 Rust 与 Tesseract 进行英文数字验证码识别
  • contig 和 scaffold的区别和联系
  • linux ftp脚本
  • Yanhua Mini ACDP-2 BMW ECU Package: EUC Clone License with Modules 3/8/27 Bench Interface Board
  • [Python刷题记录]-搜索插入位置-二分查找-简单
  • 告别低效备考!2025雅思封闭班培训机构深度测评
  • mariadb galera集群在Openstack中的应用 - T