簡體   English   中英

如何將元組保存到 sys.stdin 中的某個變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM