Python从标准输入读取数据的方法
Python从标准输入读取数据的方法
技术背景
在Python编程中,经常需要从标准输入(stdin)读取数据,比如在编写命令行工具、处理脚本输入或参与代码高尔夫挑战时。Python提供了多种方式来实现从标准输入读取数据,不同的方法适用于不同的场景。
实现步骤
使用fileinput模块
1 | |
fileinput会遍历命令行参数指定的文件中的所有行,如果没有提供参数,则从标准输入读取。注意,line会包含一个尾随的换行符,可使用line.rstrip()去除。
使用sys.stdin
1 | |
sys.stdin是一个类似文件的对象,可以调用read或readlines函数来读取所有内容,或者将内容按换行符分割。
使用内置函数input()(Python 3)或raw_input()(Python 2)
1 | |
这两个函数用于提示用户输入,input()在Python 3中使用,raw_input()在Python 2中使用。
使用open(0)(Python 3)或io.open(0)(Python 2)
1 | |
在Python 3中,open函数接受文件描述符,0 是标准输入的描述符。
使用open('/dev/stdin')
1 | |
该方法在Python 2和3中都可用,但不适用于Windows系统。
核心代码
完整示例:使用sys.stdin和input
1 | |
处理命令行参数和标准输入
1 | |
使用argparse处理输入
1 | |
最佳实践
- 对于简单的交互式输入:优先使用
input()(Python 3)或raw_input()(Python 2)。 - 对于处理大量数据或文件输入:使用
sys.stdin或fileinput模块。 - 在代码高尔夫场景中:可考虑使用
open(0)或open('/dev/stdin')。
常见问题
数据阻塞问题
使用for line in sys.stdin:时,如果没有数据传入,程序会一直阻塞。可以使用select模块来检查是否有数据:
1 | |
Windows系统下的二进制数据读取问题
在Windows系统中,sys.stdin默认以文本模式打开,读取二进制数据时会损坏\r\n。可通过以下方式解决:
1 | |
Python从标准输入读取数据的方法
https://119291.xyz/posts/python-read-from-stdin-methods/