Skip to content

Latest commit

 

History

History
132 lines (96 loc) · 3.02 KB

415-189725-读取细节.sy.md

File metadata and controls

132 lines (96 loc) · 3.02 KB
show version enable_checker
step
1.0
true

读取文件

回忆

  • 上次研究了操作文件
  • 操作文件流分成三步
    • 打开文件流
    • 读取文件流
    • 关闭文件流
    • 读写文件
  • 这文件流太猛了
  • 一下子全出来了
  • 咱能细水长流么?🤔

重温文件流操作流程

  1. 打开文件流
    • f = open("oeasy.txt")
  2. 读取文件
    • f.read()
  3. 关闭文件流
    • f.close()
  • 上次的问题是文件流太猛
  • 一股脑全流出来了
  • 这次想要细水长流

readline

  • 可以让文件流一行一行流出来

图片描述

  • 但是结尾那个\n怎么还原样显示呢?
  • 不应该是转移成回车么?
  • 读出来的是什么类型的数据呢?

赋值

  • 查看 readline 函数返回的类型

图片描述

  • 是一个字符串
  • 把他赋给一个变量 s
  • 然后输出 s

图片描述

  • 只有在 print(s)的时候
  • \n才会被翻译成转义序列
  • 当做回车进行输出

重写

  • 重写oeasy.txt
  • 里面只写oeasy
  • 然后让在游乐园里面
  • 尝试和文件内容互动

图片描述

  • 为了避免缓存问题
  • 重启一下游乐园

互动

图片描述

  • 重启游乐园之后
  • 打开文件
  • 读取文件第一行赋给 s_name
  • s_name.replace("\n","")
    • replace 的意思是替换
    • 把 s_name 中的 \n 替换为 空串
  • 然后就可以根据文件内容进行输出了!🤩
  • 更换一下文件内容试试

更换

  • 重进游乐场

图片描述

  • 试验成功
  • 不要忘记关闭文件流
  • 这种把文件写死在程序源代码的方法叫做 hardcode
  • 很硬的把变量写死了
  • 这不是一个好主意
  • 可以来点交互
  • 动态决定打开哪个文件
  • 怎么交互呢?

输入

  • 如果我想通过键盘输入需要读取的文件名
  • 回忆一下键盘输入
    • input()
    • 把返回值赋给一个 s_file 变量

图片描述

  • 如果输入的是一个不存在的文件呢?
    • 比如当前目录并不存在的一个叫做 o9z.txt 的文件

报错

图片描述

  • 找不到这个文件o9z.txt
    • 报了 Error
    • FileNotFoundError
    • 没有当然找不到
  • 不过可能这 o9z.txt 不在当前目录
    • 在别的目录
    • 我还想打开他那怎么办呢?

总结

  • 这次研究了细水长流
    • 读取文件流
    • 一行一行流出来
    • 而且可以通过 input()函数
    • 动态选择具体打开的文件
  • 如果我要选择的文件不在当前目录怎么办呢?🤔
  • 下次再说 👋