[英]How to save a tuple to some variable from 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()
或其他一些轉換 function。
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()
內置 function 稍作調整,如下所示。 通過這樣做,您將沒有導入和干凈的代碼。
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:
程序停止讀取標准輸入。
如果輸入是最后的元組,您可以使用:
new_l = []
for _ in l:
new_l.append(tuple(_))
print(new_l)
創建新的元組列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.