Python 读取具有多个数据类型的Stdin
假设您有由多个数据类型组成的输入(命令行参数,txt文件),如int和str。如何有效地将每个项目转换为int(如果是数字)和str(如果是str) 例如: input.txtPython 读取具有多个数据类型的Stdin,python,string,int,stdin,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',
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()将只将所有内容转换为字符串 一个选项是使用异常处理:
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]
$python strint.py您可以使用isdigit()检查这是最有效的方法吗?从字符串到整数的转换代价高吗?“从字符串到整数的转换代价高吗?”的答案取决于将此转换与什么操作进行比较。不过,简单地说,大多数转换相当于几个整数乘法和加法,这是任何典型计算机都能完成的最基本、最快的操作之一。