首页 > 解决方案 > 如何将元组保存到 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)

标签: python

解决方案


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,这样您就不必自己进行所有这些解析?)


推荐阅读