【发布时间】:2020-03-31 19:36:19
【问题描述】:
我刚刚学习 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 循环中访问每个文件的值...如果您有任何建议,请告诉我,谢谢!
【问题讨论】:
标签: python ipywidgets