首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将Jupyter笔记本中单元格的输出复制到剪贴板?

如何将Jupyter笔记本中单元格的输出复制到剪贴板?
EN

Stack Overflow用户
提问于 2017-05-29 00:53:53
回答 5查看 37.1K关注 0票数 38

如何将Jupyter notebook中单元格的输出复制到剪贴板,而不必通过拖放将其选中?

EN

回答 5

Stack Overflow用户

发布于 2017-05-29 01:08:59

Jupyter notebook在浏览器中运行,因此您可以使用一些javascript来选择单元格并将其复制到剪贴板。经过反复试验,我想出了这个小书签:

代码语言:javascript
代码运行次数:0
运行
复制
javascript:(function%20()%20%7B%20function%20SelectText(element)%20%7B%20var%20range%3B%20var%20selection%3B%20if%20(document.body.createTextRange)%20%7B%20range%20%3D%20document.body.createTextRange()%3B%20range.moveToElementText(element)%3B%20range.select()%3B%20copy2clipboard(range.text%2C%20element.innerHTML)%3B%20document.getSelection().removeAllRanges()%3B%20%7D%20else%20if%20(window.getSelection)%20%7B%20selection%20%3D%20window.getSelection()%3B%20range%20%3D%20document.createRange()%3B%20range.selectNodeContents(element)%3B%20selection.removeAllRanges()%3B%20selection.addRange(range)%3B%20copy2clipboard(selection.toString()%2C%20element.innerHTML)%3B%20selection.removeAllRanges()%3B%20%7D%20%7D%3B%20function%20copy2clipboard(text%2C%20html)%20%7B%20function%20listener(e)%20%7B%20e.clipboardData.setData('text%2Fplain'%2C%20text)%3B%20e.clipboardData.setData('text%2Fhtml'%2C%20html)%3B%20e.preventDefault()%3B%20%7D%20document.addEventListener('copy'%2C%20listener)%3B%20document.execCommand('copy')%3B%20document.removeEventListener('copy'%2C%20listener)%3B%20%7D%3B%20%24('%23notebook-container').on('mouseenter'%2C%20'.input%2C%20.output_wrapper'%2C%20function%20()%20%7B%20if%20(%24(this).find('i%3Alast').length)%20%7B%20%24(this).find('i%3Alast').show()%3B%20%7D%20else%20%7B%20%24(this).css(%7B%20'position'%3A%20'relative'%20%7D).append(%24('%3Ci%20style%3D%22position%3Aabsolute%3B%20top%3A7px%3B%20left%3A%207px%3B%22%20class%3D%22fa-copy%20fa%22%3E%3C%2Fi%3E').on('click'%2C%20function%20()%20%7B%20SelectText(%24(this).parent().find('.input_area%2C%20.output')%20%5B0%5D)%3B%20%24(this).slideUp()%3B%20%7D))%3B%20%7D%20%7D)%3B%20%24('%23notebook-container').on('mouseleave'%2C%20'.input%2C%20.output_wrapper'%2C%20function%20()%20%7B%20%24(this).find('i%3Alast').hide()%3B%20%7D)%3B%20%7D)%20()%3B

将其添加到您的书签中,并在笔记本页面上运行。

它是如何工作的

它为每个输入和输出单元格添加一个小的复制图标,该图标显示在hover.

  • Clicking上复制图标选择相应的单元格内容,将其发送到
  1. ,然后取消选择。内容以 text /纯text/html格式复制,因此可以使用html copy复制文本、表格、图像和绘图,图标消失以提供一些反馈,并在下一个悬停事件时显示。

它应该可以在任何现代浏览器上工作,包括IE11。

以下是解码后的源代码:

代码语言:javascript
代码运行次数:0
运行
复制
(function () {
  function SelectText(element) {
    var range;
    var selection;
    if (document.body.createTextRange) {
      range = document.body.createTextRange();
      range.moveToElementText(element);
      range.select();
      copy2clipboard(range.text, element.innerHTML);
      document.getSelection().removeAllRanges();
    } else if (window.getSelection) {
      selection = window.getSelection();
      range = document.createRange();
      range.selectNodeContents(element);
      selection.removeAllRanges();
      selection.addRange(range);
      copy2clipboard(selection.toString(), element.innerHTML);
      selection.removeAllRanges();
    }
  };
  function copy2clipboard(text, html) {
    function listener(e) {
      e.clipboardData.setData('text/plain', text);
      e.clipboardData.setData('text/html', html);
      e.preventDefault();
    }
    document.addEventListener('copy', listener);
    document.execCommand('copy');
    document.removeEventListener('copy', listener);
  };
  $('#notebook-container').on('mouseenter', '.input, .output_wrapper', function () {
    if ($(this).find('i:last').length) {
      $(this).find('i:last').show();
    } else {
      $(this).css({
        'position': 'relative'
      }).append($('<i style=\"position:absolute; top:7px; left: 7px;\" class=\"fa-copy fa\"></i>').on('click', function () {
        SelectText($(this).parent().find('.input_area, .output') [0]);
        $(this).slideUp();
      }));
    }
  });
  $('#notebook-container').on('mouseleave', '.input, .output_wrapper', function () {
    $(this).find('i:last').hide();
  });
}) ();

Bookmarklet是通过删除代码中的换行符并通过encodeURIComponent()函数运行来创建的。

老答案

在python中,有几种方法可以使用tkinter、win32或ctype将数据复制到剪贴板。但是如果你使用的是Jupyter notebook,你可能也会使用pandas。

代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd
df = pd.DataFrame(['Copy me to clipboard'])
df.to_clipboard(index=False,header=False)
票数 25
EN

Stack Overflow用户

发布于 2018-10-12 01:41:36

您可以尝试使用pyperclip -一个将字符串复制到系统剪贴板的第三方包。

给定的

代码语言:javascript
代码运行次数:0
运行
复制
import pyperclip as clip


# Sample Data
res = [(str(x*100), x) for x in range(1, 10)]
res

输出

代码语言:javascript
代码运行次数:0
运行
复制
[('100', 1), ('200', 2), ('300', 3),
 ('400', 4), ('500', 5), ('600', 6), 
 ('700', 7), ('800', 8), ('900', 9)]

代码

代码语言:javascript
代码运行次数:0
运行
复制
clip.copy(f"{res}")
#clip.copy("{}".format(res))                           # python < 3.6
clip.paste()                                           # or Ctrl + V

输出

代码语言:javascript
代码运行次数:0
运行
复制
[('100', 1), ('200', 2), ('300', 3),
 ('400', 4), ('500', 5), ('600', 6),
 ('700', 7), ('800', 8), ('900', 9)]
票数 15
EN

Stack Overflow用户

发布于 2019-01-24 20:34:41

我用的是Jupyter实验室。可以右键单击要复制的输出单元格,然后选择

为Output创建新视图。这将把输出放在一个单独的屏幕上。在新的输出屏幕上,它将允许您使用CRTL + C或右键单击进行复制。

希望这能有所帮助。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44229820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档