0

这是来自一个家庭作业问题,但我对 Python 不太熟悉,也找不到任何关于以下语句中发生的事情的信息。

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

因此,消息只是从连接到 connectionSocket 的客户端获取数据并将其放入消息中。从那里我可以看出消息是拆分的,这意味着它在消息中获取字符串并返回一个单词列表(我猜分隔符只是一个空格)。但那是什么 [1]?

它应该是一个网络服务器,所以我在想一个场景,比如如果我去 serverAddress:serverPort/HelloWorld.html 消息是“HelloWorld.html”部分,对吧?然后我打开文件。但我'我迷失了 [1] 和 [1:] 的目的。

4

1 回答 1

1
filename = message.split()[1]

您(正确地)猜到了字符串 inmessage被拆分并作为单词列表返回。

如果这是一个 HTTP 请求,那么前 1024 个字节message将类似于:

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

通过splitting 这个字符串,您可以生成一个列表开头:

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

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


f = open(filename[1:]) 

这将切片中的任何内容filename,再次使用索引。filename[1:] 返回从 [1] 到末尾的每个元素。如果上面的假设是正确的,那么它将丢弃前导/并允许打开文件。

于 2013-10-20T22:00:41.077 回答