sys库中read readline readlines区别?笔试用哪个读取输入数据?用readline
文章目录
- 问题
- 回答
- 三个函数的区别
- 输入数据行数不确定
反思::以为
read()
可以顺利读取所有输入,但其读取的停止条件容易出问题,以后读取不确定行数的输入数据还是用循环加
readline()
写吧
问题
我一开始认为readline()
读取一行数据,read()
可以读取全部输入数据。但我做笔试题的时候发现readline()
读取一行数据没问题,read()
读取不到全部数据,只能读取一行,给我搞自闭了。
回答
网上搜了一圈,先看了下三个函数的区别,然后思考了下下次遇到输入数据行数不确定的情况该怎么做.
三个函数的区别
特性 | sys.stdin.read() | sys.stdin.readline() | sys.stdin.readlines() |
---|---|---|---|
功能 | 读取全部输入,直到文件末尾(EOF) | 读取一行输入,包括换行符\n | 读取所有行,返回一个列表 |
返回值 | 一个字符串 | 一个字符串 | 一个字符串列表,每个元素是一行 |
换行符处理 | 保留输入中的换行符\n | 保留行末的换行符\n | 保留每行末尾的换行符\n |
何时停止 | 遇到 EOF (Ctrl+D on Linux/Mac, Ctrl+Z on Windows) | 遇到换行符\n 或EOF | 遇到 EOF |
内存使用 | 如果输入很大,会占用大量内存 | 内存友好,一次只读一行 | 如果输入很大,会占用大量内存 |
适用场景 | 一次性读取所有输入,如管道传过来的数据 | 循环读取,处理大文件或交互式输入 | 需要立即获得所有行并进行列表操作 |
输入数据行数不确定
实践下来感觉这种情况还是用readline()
来写吧,代码如下
import sys
data = []
while True:line = sys.stdin.readline().strip()if not line:breakdata.append(line)