处理数据 · 10 道样题

Python 文件读写练习题与答案

文件题奖励精确。模式决定文件是读取、覆盖还是追加;with 块决定它是否关闭;编码决定非 ASCII 文本能否保留。

38 道题在完整题库中 · 19 道选择 · 15 道填空 · 4 道输出

这个主题考什么

  • 根据任务选择 r、w、a 和二进制模式。
  • 使用 with 块,让文件在出错时也能关闭。
  • 读取行和写入文本时,不丢失换行符。

常见错误

  • 想追加却用了 w,结果把原文件截断。
  • 内容不是 ASCII 时,打开文本文件却不指定编码。
  • 忘记 readlines 会在每一行末尾保留换行符。
样题

样题

10

从完整题库中挑出的 10 道代表题。先自己作答,再展开答案。

  1. 选择题q0899

    1. 小明写订单到文件 open("订单.txt", "w"),"w" 表示什么?

    1. 读取(默认模式)
    2. 写入(覆盖原内容)
    3. 追加(保留原内容)
    4. 只读(不能写)
    显示答案

    答案

    B. 写入(覆盖原内容)

    解析: w 在 open 执行时就截断文件,旧流水在第一行写入前已经清空;要保留旧内容只能改用 a,否则每次打开都从零开始。

  2. 选择题q0906

    2. 小明写下一行后,用另一个程序打开同一文件却看不到内容。哪个调用能把缓冲刷进磁盘?

    1. f.flush()
    2. f.seek(0)
    3. f.read()
    4. f.close(flush=True)
    显示答案

    答案

    A. f.flush()

    解析: write() 只是把文本放进进程缓冲;flush() 才交给操作系统,在那之前别的程序看不到。close() 也会刷新,但只在块结束那一刻。

  3. 选择题q0913

    3. 哪种结构能在代码块内发生异常时仍然关闭文件?

    1. for 循环
    2. with 语句
    3. match 语句
    4. lambda
    显示答案

    答案

    B. with 语句

    解析: 这里只有 with 块绑定了清理动作:异常还在传播时,__exit__ 就会调用 close(),循环和 match 都不管这个。

  4. 选择题q0918

    4. f.read() 和 f.readlines() 的主要区别是?

    1. 两者完全一样
    2. 前者返回整段字符串,后者返回行列表
    3. 后者会自动关闭文件
    4. 前者只能读二进制
    显示答案

    答案

    B. 前者返回整段字符串,后者返回行列表

    解析: read() 把全文作为一个字符串返回;readlines() 按换行切分且保留换行符,返回列表,readline() 只取一行。

  5. 填空题q0901

    5. 小明读写中文菜单文件,为防乱码要指定 open(..., encoding=___)

    显示答案

    答案

    utf-8

    解析: 不写 encoding 会用平台默认值,Windows 上常是 GBK;显式写 utf-8 才按写入时的字节解码。

  6. 填空题q0921

    6. 在文件末尾追加内容,模式填什么?

    with open('orders.txt', '____', encoding='utf-8') as f:
        f.write('new\n')
    显示答案

    答案

    a

    解析: a 在末尾追加,之前的订单得以保留。w 会先清空,r 不允许写入。 文件不存在时 a 会新建,第一次追加不用特殊处理。

  7. 填空题q0928

    7. 在数据行之前先写表头,空里填哪个方法?

    writer = csv.DictWriter(f, fieldnames=['name', 'price'])
    writer.____()
    显示答案

    答案

    writeheader

    解析: writeheader() 把 fieldnames 写成第一行。不写的话文件从数据开始,之后 DictReader 会把第一条数据当表头。

  8. 输出预测q0900

    8. pathlib 拆路径,三个属性分别是什么?

    from pathlib import Path
    p = Path("data/orders.csv")
    print(p.name, p.suffix, p.parent)
    显示答案

    答案

    orders.csv .csv data

    解析: Path 只切字符串不碰磁盘:name 是带后缀的文件名,suffix 含点号,parent 是 data。

  9. 输出预测q0930

    9. 内存文件里有两行小票,读取后行数是多少?

    import io
    f = io.StringIO('拿铁,18\n美式,15\n')
    print(len(f.readlines()))
    显示答案

    答案

    2

    解析: readlines() 每个以换行结尾的行算一项,'latte,18\n' 与 'americano,15\n' 共 2 项。 readlines() 还会把整个文件读进内存,日志变大后要留意。

  10. 输出预测q0931

    10. 写入内存文件后读出的内容是什么?

    import io
    f = io.StringIO()
    f.write('拿铁,18')
    print(f.getvalue())
    显示答案

    答案

    拿铁,18

    解析: StringIO 把写入的文本留在进程里,不落磁盘;getvalue() 原样返回,也不加换行,单元测试里很好用。

常见问题

为什么用 with open 而不是手动 open 和 close?

with 块会自动关闭文件,即使块内发生异常也会关闭。

w 模式会对已有文件做什么?

它会先截断文件。要追加用 a;要更新但不截断可以用 r+。

继续保持练习节奏。

完整题库会在这个浏览器里记住进度,支持按主题筛选,并包含每日一题和错题重练。

打开完整练习