您能帮助如何使用中的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)
以创建新的元组列表。