从 ipywidgets FileUpload 访问多个上传文件的内容

2024-05-07

我刚刚学习 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 循环中访问每个文件的值...如果您有任何建议,请告诉我,谢谢!


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

1)循环解包

for elem in upload.value.items():
     name, file_info = elem
     with open (name, 'wb') as file:
          file.write(file_info['content'])

2)或者,直接解压

for name, file_info in upload.value.items():
     with open (name, 'wb') as file:
          file.write(file_info['content'])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 ipywidgets FileUpload 访问多个上传文件的内容 的相关文章

随机推荐