下载 Jupyter 笔记本服务器上路径中的所有文件
Posted
技术标签:
【中文标题】下载 Jupyter 笔记本服务器上路径中的所有文件【英文标题】:Download all files in a path on Jupyter notebook server 【发布时间】:2017-08-19 22:44:12 【问题描述】:作为为作业运行 Jupyter 笔记本的班级中的用户,我可以通过 Web 界面访问作业。我假设作业存储在服务器上我个人空间的某个地方,所以我应该能够下载它们。如何下载我个人用户空间中的所有文件? (例如,wget
)
这是路径结构:
https://urltoserver/user/username
有几个目录:assignments、data等
https://urltoserver/user/username/assignments
https://urltoserver/user/username/data
...
我想下载所有文件夹(递归)。足以让我在本地启动我在网上看到的任何东西。如果有一些被禁止的文件夹,那么好吧,跳过那些并下载其余的。
请完全按照我自己无法理解的方式指定命令(我试过wget
)
【问题讨论】:
我认为如果我们可以选择多个文件并单击“下载”以获取所有文件,这将非常有用。但是我认为 Jupyter notebook 还不支持这一点。 【参考方案1】:尝试在您的一个笔记本中将其作为单独的单元格运行:
!tar chvfz notebook.tar.gz *
如果您想覆盖树上的更多文件夹,请在目录的每一步之前在*
之前写上../
。 notebook.tar.gz 文件将保存在与您的笔记本相同的文件夹中。
【讨论】:
这非常有效。您为我节省了数小时的手动下载时间!谢谢 从 Jupyter 笔记本中转到文件 -> 打开。这将打开一个新的浏览器选项卡。从那里单击新 tar.gz 旁边的复选框。顶部会出现一个“下载”按钮。点击它,指定本地路径并保存。 仅供参考,!tar chvfz notebook.tar.hz * 也会拉入作为符号链接的文件,因此您不会有损坏的图像。 这只是其中一个答案,我非常感谢! 如果不跟随链接文件,使用tar
命令的h
选项【参考方案2】:
我正在通过 Coursera 参加 Andrew Ng 教授的 Deeplearning.ai 计划。该课程在线使用 Jupyter Notebooks。与笔记本一起是带有大文件的文件夹。这是我用来成功将所有作业以及相关文件和文件夹下载到本地 Windows 10 PC 的内容。
从上面 Serzan Akhmetov 的帖子中建议的以下代码行开始:
!tar cvfz allfiles.tar.gz *
这会生成一个 tarball,如果足够小,可以从 Jupyter notebook 本身下载并使用 7-Zip 解压缩。但是,本课程有大小为 100 MB 的单个文件和包含 100 个示例图像的文件夹。生成的 tarball 太大,无法通过浏览器下载。
所以再添加一行代码将文件拆分为可管理的块大小,如下所示:
!split -b 50m allfiles.tar.gz allfiles.tar.gz.part.
这会将存档分成多个部分,每个部分大小为 50 Mb(或您的首选大小设置)。每个部分都有一个扩展名,如allfiles.tar.gz.part.xx
。像以前一样下载每个部分。
最后的任务是解压多部分存档。这对于 7-Zip 来说非常简单。只需选择系列中的第一个文件以使用 7-Zip 进行提取。对于所使用的示例,这是名为 allfiles.tar.gz.part.aa
的文件。只要它们在同一个文件夹中,它将把所有必要的部分放在一起。
希望这有助于添加以上 Serzan 的出色回答。
【讨论】:
不想使用 7-Zip 的用户可以留在 unix/linux 并使用!cat allfiles* > your_file_name.gz
。这会将目录中以所有文件开头的所有内容合并到一个文件中
但这似乎只是在远程服务器上创建了tar,如何下载到本地PC?
右键单击 tar 文件将提供一组选项,包括下载@ChristyLee【参考方案3】:
您可以从“新建”菜单中创建一个新终端并调用https://***.com/a/47355754/8554972中描述的命令:
tar cvfz notebook.tar.gz *
文件 notebook.tar.gz 将保存在与您的笔记本相同的文件夹中。
【讨论】:
将cvfz
更改为chvfz
将下载符号链接文件。【参考方案4】:
最简单的方法是使用 tar 归档所有内容,但也有用于文件下载的 API。
GET /files/_FILE_PATH_
要获取文件夹中的所有文件,您可以使用:
GET /api/contents/work
例子:
curl https://server/api/contents?token=your_token
curl https://server/files/path/to/file.txt?token=your_token --output some.file
来源:Jupyter Docs
【讨论】:
【参考方案5】:首先尝试通过以下方式获取目录:
import os
os.getcwd()
然后使用来自How to create a zip archive of a directory 的片段。 您可以通过压缩它来下载完整的目录。 祝你好运!
【讨论】:
【参考方案6】:我认为wget
不可能做到这一点,即使使用wget -r
选项也是如此。您可能需要单独下载它们(使用仪表板视图中的“下载”选项(仅适用于单个、非目录、非运行的笔记本项目),如果您可以使用的话。
但是,您可能无法下载它们,因为如果您的老师使用的是 nbgrader 等评分软件,那么学生自己可以访问笔记本是不可取的 - 因为笔记本也可以包含有关答案的信息。
【讨论】:
【参考方案7】:from google.colab import files
files.download("/content/data.txt")
如果您在 google colab 或 Jupyter notebook 中工作,这些行可能会起作用。
第一行导入库文件 第二个,下载您创建的文件,例如:“data.txt”(您的文件名)位于内容中。
【讨论】:
虽然这段代码可能会解决问题,但一个好的答案还应该解释代码的什么以及它如何提供帮助。【参考方案8】:我在@Sun Bee 的solution 的基础上做了一点更新,它将允许您创建带有时间戳子前缀的多个文件备份。
!tar cvfz allfiles-`date +"%Y%m%d-%H%M"`.tar.gz *
【讨论】:
以上是关于下载 Jupyter 笔记本服务器上路径中的所有文件的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 REST API 与 Jupyter 笔记本中的代码单元进行交互?
下载为 html 时的 Jupyter 笔记本暗模式无法正确呈现
Jupyter 笔记本中的 BeautifulSoup 和 lxml