如何将元组保存到sys.stdin中的某个变量中



您能帮助如何使用中的sys.stdin捕获数据吗

例如,我想将传入线路保存到列表l中。

传入数据为元组:('sometext', 1, 0), ('sometext', 0, 5)

import sys
l = list()
for line in sys.stdin.readlines():
l=sys.stdin.read()

print(l)

sys.stdin读取(或者通过input()读取(只返回一个字符串;如果该字符串应该转换为其他内容,则需要对其进行解析或以其他方式进行处理

如果您需要Python表达式,您可以使用ast.literal_eval()来解析每一行,但对于像这样的简单格式,您可以简单地使用split并在需要转换的字段上调用int()或其他转换函数。

l = list()
for line in sys.stdin:
if not line.startswith("(") or not line.endswith(")n"):
raise ValueError("Not valid input: %s" % line)
# properly speaking we should only trim one each of left and right paren
fields = [x.strip() for x in line.lstrip("(").rstrip(")n").split(",")]
if len(fields) != 3:
raise ValueError("Wrong number of fields: %s" % line)
l.append(tuple([fields[0].strip('"')] + list(map(int, fields[1:]))))

这是粗糙和不雅的,所以至少应该说服你可能有更好的解决方案来解决你的问题(也许只需阅读CSV或JSON,这样你就不必自己做所有这些解析了?(

您可以直接使用input()内置函数,只需进行如下微调。这样一来,就没有导入和干净的代码了。

l = list()
while True:
_in = input()
if _in.lower() in ('q', 'quit'):
break
l.append(_in)
t = tuple(l)
print(t)

结果

$ python run.py 
a
b
c
q
('a', 'b', 'c')

然而,总是规定添加日志或print语句来阐明程序内部的情况。

如果你想使用sys.stdin,你可以使用这个:

import sys
l = []
for line in sys.stdin:
if len(line) == 1:
break
l.append(line[:-1].split())
print(l)

行中的最后一个字符是";\n〃;所以,如果你不需要保存这个削减它与

line[:-1]

就像我一样。

如果行为空(仅包含换行符(if len(line) == 1 :程序停止读取stdin。

如果最后的输入是元组,您可以使用:

new_l = []
for _ in l:
new_l.append(tuple(_))
print(new_l)

以创建新的元组列表。

最新更新