我得到如何打開文件,然後使用Python的預先構建函數與他們。但是sys.stdin如何工作?sys.stdin讀什麼?
for something in sys.stdin:
some stuff here
lines = sys.stdin.readlines()
sys.stdin上述兩種不同用法有什麼區別?它從哪裏讀取信息?是通過鍵盤嗎,還是我們還要提供一個文件?
我得到如何打開文件,然後使用Python的預先構建函數與他們。但是sys.stdin如何工作?sys.stdin讀什麼?
for something in sys.stdin:
some stuff here
lines = sys.stdin.readlines()
sys.stdin上述兩種不同用法有什麼區別?它從哪裏讀取信息?是通過鍵盤嗎,還是我們還要提供一個文件?
所以,你必須使用Python的「預先內置函數」,大概是這樣的:
file_object = open('filename')
for something in file_object:
some stuff here
這樣通過這恰好返回從下一行的文件對象上調用迭代讀取文件文件。
你也可以使用:
file_object = open('filename')
lines = file_object.readlines()
讀取從當前文件位置的行成一個列表。
現在,sys.stdin
只是另一個文件對象,恰好在您的程序啓動之前由Python打開。你對該文件對象的處理由你決定,但它與任何其他文件對象沒有任何區別,只是你不需要open
。
for something in sys.stdin:
some stuff here
將迭代通過標準輸入,直到達到文件結束。如此:
lines = sys.stdin.readlines()
你的第一個問題實際上是關於使用文件對象的不同方式。
二,它從哪裏讀取?它從文件描述符0(零)讀取。在Windows上,它是文件句柄0(零)。文件描述符/句柄0默認連接到控制檯或tty,因此它實際上是從鍵盤讀取的。但是它可以使用語法類似這樣的重定向,通常由殼(如bash或CMD.EXE):
myprog.py < input_file.txt
能改變文件描述符零讀取文件而不是鍵盤。在UNIX或Linux上,它使用底層調用dup2()
。閱讀您的shell文檔以獲取有關重定向的更多信息(如果您很勇敢的話,也許是man dup2
)。
它從標準輸入讀取 - 它應該由鍵盤以流數據的形式提供。
不需要提供文件,但是您可以使用redirection將文件用作標準輸入。
在Python中,readlines()
方法讀取整個流,然後在換行符分裂起來並創建每一行的列表。
lines = sys.stdin.readlines()
上面創建了一個名爲lines的列表,其中每個元素將是一行(由行尾字符確定)。
您可以在Python教程的input and output section上閱讀更多信息。
如果您想提示用戶進行輸入,使用input()
方法(在Python 2 ,使用raw_input()
):
user_input = input('Please enter something: ')
print('You entered: {}'.format(user_input))
那麼當我使用sys.stdin.readlines()而不是sys.stdin時,標準輸入的讀取方式是不同的?第二個輸入是否到達每個單詞?我仍然困惑。 – Vimzy 2015-04-05 05:25:46
for something in sys.stdin:
some stuff here
如您所願,因爲sys.stdin
上面的代碼不起作用是一個文件句柄 - 它是stdin
的文件句柄。它不會到達some stuff here
線
lines = sys.stdin.readlines()
當上述在交互式shell運行腳本,它將直到用戶按下CTRL-d,其指示輸入結束塊的執行。
那麼,當我使用sys.stdin.readlines()而不是sys.stdin時,標準輸入的讀取方式會有所不同嗎?第二個輸入是否到達每個單詞?我仍然困惑。 – Vimzy 2015-04-05 05:31:50
你對'input()'熟悉嗎?無論input()從哪裏接受輸入,都是'sys.stdin'。這可能是一個終端,或者它可能來自一個文件,或者它可能來自另一個程序的輸出,或者它可能是別的,這取決於你如何調用程序。 – user2357112 2015-04-05 05:23:42