读取具有多种数据类型的Stdin

时间:2014-02-10 00:06:58

标签: python string int stdin

假设您有输入(命令行参数,txt文件),它包含多种数据类型,如int和str。如果它是一个数字,你如何有效地将每个项目转换为int,如果它是str,则如何str?

示例:

input.txt中

A 1 B C 23 
5 D 0 E 2
143 E 6 A 1

输出:

["A",1,"B","C",23]
[5,"D",0,"E",2]
[143,"E",6,"A",1]

使用open()和readlines(),您可以将其存储在变量中并获取:

['A 1 B C 23 \n', '5 D 0 E 2\n', '143 E 6 A 1']

但是从这里开始,如果我想使用strip,我必须指定是否要将所有内容转换为str()或int() - int()将导致错误,因为它无法接受字符串,并且str()只会将所有内容转换为字符串。

1 个答案:

答案 0 :(得分:1)

一种选择是使用异常处理:

import sys

def strint (s):
    try:
        x = int(s)
    except:
        x = s
    return x

for line in sys.stdin:
    print([strint(x) for x in line.split()])

使用strint.py中的上述代码和文件strint.txt中的示例输入,我们可以运行它以获得以下输出:

$ python strint.py <strint.txt
['A', 1, 'B', 'C', 23]
[5, 'D', 0, 'E', 2]
[143, 'E', 6, 'A', 1]

更复杂的版本会捕获特定的异常,并且可以处理浮点数等。