2013-10-20 26 views
0

這是來自作業問題,但我對Python不太熟悉,無法找到關於下面的語句中發生的事情的任何信息。從套接字連接中取數據並拆分它

message = connectionSocket.recvfrom(1024) 
filename = message.split()[1] 
f = open(filename[1:]) 

所以,消息只是從客戶端連接到connectionSocket並將其放入消息中的數據。從那裏我可以知道消息是分裂的,這意味着它在消息中取出字符串並返回一個單詞列表(我猜測分隔符只是一個空格)。但那是什麼[1]?

它應該是一個網絡服務器,所以我想到了一個場景,比如如果我去serverAddress:serverPort/HelloWorld.html消息是'HelloWorld.html「部分,對嗎?然後我打開。文件,但我失去的目的[1]和[1:]。

回答

1
filename = message.split()[1] 

你猜(正確地)在message字符串分割並返回一個單詞列表

如果這是一個HTTP請求,那麼message的前1024個字節將類似於:

"GET /file.html cruft...""GET /path/file.html cruft..."

通過split婷這個字符串你生成一個列表開始:

["GET", "/file.html", "cruft..."]

[1]表示列表內的索引[1]的元素,即第二元素,第一索引位置是[0]。所以filename = "/file.html"或= "/directory/subdirectory/file.html"


f = open(filename[1:]) 

這片無論是在filename,再次使用索引。 [1:]將[1]中的每個元素filename返回到結尾。如果上述假設是正確的,那麼它將丟棄前導/並允許打開文件。

+0

作爲一個例子什麼將在索引0?我是否認爲它正在解析HelloWorld.html作爲完整的消息,因此f = open(HelloWord.html)? – nitiger

+0

我已經做了一個有根據的猜測,並根據這個假設改進了答案。 – Pines

+0

網址使用正斜槓('/'),而不是反斜槓('\\')。 – jwodder