我有以下简单的 Web 服务器,利用 Python 的http模块:
import http.server
import hashlib
class RequestHandler(http.server.BaseHTTPRequestHandler):
protocol_version = "HTTP/1.1"
def do_PUT(self):
md5 = hashlib.md5()
remaining = int(self.headers['Content-Length'])
while True:
data = self.rfile.read(min(remaining, 16384))
remaining -= len(data)
if not data or not remaining:
break
md5.update(data)
print(md5.hexdigest())
self.send_response(204)
self.send_header('Connection', 'keep-alive')
self.end_headers()
server = http.server.HTTPServer(('', 8000), RequestHandler)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)
当我使用curl上传文件时,效果很好:
curl -vT /tmp/test http://localhost:8000/test
由于文件大小是预先已知的,curl 将发送一个Content-Length: 5标头,因此我可以知道应该从套接字读取多少内容。
但如果文件大小未知,或者客户端决定使用chunked传输编码,则此方法会失败。
可以使用以下命令进行模拟:
curl -vT /tmp/test -H "Transfer-Encoding: chunked" http://localhost:8000/test
如果我从self.rfile该块的过去读取,它将永远等待并挂起客户端,直到它断开 TCP 连接,其中self.rfile.read将返回一个空数据,然后它会跳出循环。 …
有 Docker buildkit:https : //github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md
它有一个额外的选项RUN(除其他外):--mount=type=cache.
我从文档中无法弄清楚的是:
我在python中有以下pandas DataFrame:
df = pd.DataFrame({'id': [1, 1, 2, 2, 3],
'field1': [1, 2, 3, 4, 5],
'field2': ['a', 'b', 'c', 'd', 'e']})
Run Code Online (Sandbox Code Playgroud)
id field1 field2
0 1 1 a
1 1 2 b
2 2 3 c
3 2 4 d
4 3 5 e
Run Code Online (Sandbox Code Playgroud)
我想对上面的表进行分组,id然后将该组中所有选定的列值移动到新列中,作为python词典的列表。
因此,从以上我想得出这一点:
id fields
0 1 [{'field1': 1, 'field2': 'a'}, {'field1': 2, 'field2': 'b'}]
2 2 [{'field1': 3, 'field2': 'c'}, {'field1': 4, 'field2': 'd'}]
4 3 [{'field1': 5, 'field2': 'e'}]
Run Code Online (Sandbox Code Playgroud)
我可以使用以下python代码实现此目的:
id field1 …Run Code Online (Sandbox Code Playgroud)