我刚刚学习 ipywidgets 并在 Jupyter Notebook Python 3 中使用它们。基本上,我试图允许用户使用 FileUpload() 上传多个文件,然后尝试访问这些文件的内容,以便我可以保存每个文件进入系统。我让它只适用于一个文件,但现在我试图让它成为一个迭代的东西,这样它就可以保存所有文件。
这是我制作文件上传的代码
from ipywidgets import FileUpload
upload = FileUpload(multiple=True)
upload
然后我单击上传小部件并上传两个 .txt 文件
我打印出了什么upload.value
好像:
{'test.txt': {'content': b'hi',
'metadata': {'lastModified': 152266374855,
'name': 'test.txt',
'size': 17,
'type': 'text/plain'}},
'test2.txt': {'content': b'bye',
'metadata': {'lastModified': 152266374855,
'name': 'test2.txt',
'size': 18,
'type': 'text/plain'}}}
我编写的第一个代码只保存一个上传的文件,并直接保存到 Jupyter 文件系统中
with open("test.txt", "wb") as fp:
fp.write(upload.data[0])
然后我尝试迭代对两个文件执行相同的操作(我已经尝试了很多事情,请原谅我,因为我不擅长字典)
for files in upload.value:
with open(file, "wb") as fp:
fp.write(file['content'])
然后我意识到这只会访问字典中的第一个键,即文件名。
我还尝试了以下变体:
for elem in upload.value:
with open (elem['metadata']['name'], 'wb') as file:
file.write(elem['content'])
我尝试做for k,v
并添加.items()
上传后,但我也遇到错误。我想我只是不知道如何在 for 循环中访问每个文件的值...如果您有任何建议,请告诉我,谢谢!