【问题标题】:Access the content from multiple uploaded files from ipywidgets FileUpload从 ipywidgets FileUpload 访问多个上传文件的内容
【发布时间】: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


    【解决方案1】:

    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'])
    

    【讨论】:

    • 谢谢!无缝工作....当我尝试添加 k、v 和 .items() 时,我在 .items() 之前取出了 .value,所以我想这就是它不起作用的原因。非常感谢
    猜你喜欢
    • 2020-01-29
    • 1970-01-01
    • 2013-01-09
    • 2016-08-23
    • 2013-11-20
    • 1970-01-01
    • 2013-12-16
    • 2013-11-17
    • 1970-01-01
    相关资源
    最近更新 更多