Python 从ipywidgets FileUpload访问多个上载文件中的内容

Python 从ipywidgets FileUpload访问多个上载文件中的内容,python,ipywidgets,Python,Ipywidgets,我刚刚学习了iPyWidget,并在Jupyter笔记本Python 3中使用了它们。基本上,我尝试允许用户使用FileUpload()上载多个文件,然后尝试访问这些文件的内容,以便将每个文件保存到系统中。我让它只为一个文件工作,但现在我正试图使它成为一个迭代的东西,这样它就可以保存所有的文件 这是我上传文件的代码 from ipywidgets import FileUpload upload = FileUpload(multiple=True) upload 然后单击upload小部

我刚刚学习了iPyWidget,并在Jupyter笔记本Python 3中使用了它们。基本上,我尝试允许用户使用FileUpload()上载多个文件,然后尝试访问这些文件的内容,以便将每个文件保存到系统中。我让它只为一个文件工作,但现在我正试图使它成为一个迭代的东西,这样它就可以保存所有的文件

这是我上传文件的代码

from ipywidgets import FileUpload

upload = FileUpload(multiple=True)

upload
然后单击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 elem in upload.value:
     with open (elem['metadata']['name'], 'wb') as file:
          file.write(elem['content'])

我试图对k,v执行
,并在上传后添加
.items()
,但也出现了错误。我想我只是不知道如何在for循环中访问每个文件的值…如果您有任何建议,请告诉我,谢谢

upload.value
返回一个字典,因此需要使用.items()迭代键值对。下面这两个都有相同的效果,2更为浓缩

1) 在循环中解包

upload.value.items()中元素的
:
文件名\u info=elem
打开(名称为“wb”)作为文件:
file.write(文件信息['content'])
2) 或者,直接打开包装

对于upload.value.items()中的名称、文件\u信息:
打开(名称为“wb”)作为文件:
file.write(文件信息['content'])

谢谢!无缝工作…当我尝试添加k、v和.items()时,我在.items()之前取出了.value,所以我想这就是它不工作的原因。非常感谢
for elem in upload.value:
     with open (elem['metadata']['name'], 'wb') as file:
          file.write(elem['content'])