2014-12-05 104 views
5

我正嘗試讀取通過命令行重定向stdin的文本文件的內容,並在接收方將其組裝回原始格式時通過Internet發送。從python重定向stdin讀取文件

例如:

$ python test.py < file.txt 

我試圖讀取該文件,並用下面的代碼通過link啓發組裝回去:

for line in sys.stdin: 
    stripped = line.strip() 
    if not stripped: break 
    result = result + stripped 

print "File is beeing copied" 
file = open("testResult.txt", "w") 
file.write(result) 
file.close() 
print "File copying is complete!" 

但只要使用這種解決方案,因爲我DON '我的文件中有一個空行(兩個'\ n'一個接一個),如果我有,我的循環會中斷,文件讀取結束。如何從stdin中讀取文件,直到達到文件的<>重定向?

+1

'file.write(sys.stdin.read())' – 2014-12-05 15:03:32

回答

5

你爲什麼連看數據:

result = sys.stdin.read() 
+0

謝謝!這正是我所需要的:) – user3717551 2014-12-06 07:14:03

3

而不是打破,你只是想continue到下一行。當迭代器到達文件末尾時會自動停止。

import sys 
result = "" 
for line in sys.stdin: 
    stripped = line.strip() 
    if not stripped: 
     continue 
    result += stripped 
+0

謝謝您的回答,它解決了我的問題。 – user3717551 2014-12-06 07:06:32

2

line.strip()正在從讀取行中刪除結尾的換行符。

如果你想要這個新行,那麼你不應該這樣做,我不認爲(你的輸出文件是否有輸入新行)?

if stripped bit正在尋找一個空行,並且原來是循環的終止特徵。

雖然這不是您的終止標記。你不想停在那裏。所以不要。

sys.stdin到達輸入末尾(EOF)時,循環將自行完成。

line.strip()下降if not stripped: break取代result = result + strippedresult = result + line,然後寫在文件中得到一個簡單的(雖然可能貴)cp腳本。

如果你想對他們做些什麼(根據你的目標),有可能更有效的方法來讀取標準輸入的所有行。

+0

是的你是對的,我剝離是不需要的(因爲它改變了它閱讀的文本,這不是我的目標)。事實上,「William Pursell」建議採用更「有效的方式來做到這一點」。 – user3717551 2014-12-06 07:13:18