Como carregar / editar / executar / salvar arquivos de texto (.py) em uma célula de notebook IPython?

232

Recentemente, mudei para o uso de notebooks IPython como parte do meu fluxo de trabalho. No entanto, não consegui encontrar uma maneira de importar arquivos .py para as células individuais de um bloco de notas aberto do IPython, para que eles possam editar, executar e salvar. Isso pode ser feito?

Encontrei isso na documentação que me diz como importar arquivos .py como novos blocos de anotações, mas isso fica aquém do que eu quero alcançar.

Qualquer sugestão será muito bem-vinda.

aaronsstack
fonte
6
Boa pergunta. Ainda estou para ver uma resposta realmente satisfatória. É especialmente importante ao servir um notebook IPython pela Internet. Se as pessoas quiserem ver / editar o código fonte das funções que são importadas (com destaque de sintaxe, etc.), não há atualmente nenhuma maneira fácil de fazer isso. Deve ser possível abrir apenas arquivos py sem transformá-los em arquivos ipynb.
Peter

Respostas:

306

EDIT : A partir do IPython 3 (agora projeto Jupyter), o notebook possui um editor de texto que pode ser usado como uma alternativa mais conveniente para carregar / editar / salvar arquivos de texto.

Um arquivo de texto pode ser carregado em uma célula do notebook com o comando magic %load.

Se você executar uma célula contendo:

%load filename.py

o conteúdo de filename.pyserá carregado na próxima célula. Você pode editar e executá-lo como de costume.

Para salvar o conteúdo da célula novamente em um arquivo, adicione a magia da célula %%writefile filename.pyno início da célula e execute-a. Cuidado, se um arquivo com o mesmo nome já existir , será substituído silenciosamente .

Para ver a ajuda de qualquer comando mágico, adicione a ?: like %load?ou %%writefile?.

Para obter ajuda geral sobre funções mágicas, digite "% magic". Para obter uma lista das funções mágicas disponíveis, use% lsmagic. Para obter uma descrição de qualquer um deles, digite% magic_name ?, por exemplo, '% cd?'.

Veja também: Funções mágicas dos documentos oficiais do IPython.

user2304916
fonte
3
Este plus %save -fparece ser o caminho para fazer o que eu estava procurando. Obrigado!
precisa saber é o seguinte
2
save -fé uma forma indireta de salvar em um arquivo e funcionará apenas se você executar a célula primeiro e depois fornecer a referência correta. Em geral, é mais fácil usar %%writefileque grava a célula atual em um arquivo. Eu atualizei a resposta para mencionar isso.
user2304916
4
O novo comando mágico está atualmente %loadpy(em vez de %load).
AlQuemist
1
de acordo com ipython.org/ipython-doc/3/interactive/magics.html, o uso %loadé bom, daqui para frente: " %loadpy ( Alias ​​de %load ) - %loadpyganhou alguma flexibilidade e diminuiu o requisito de uma .pyextensão. Por isso, foi renomeado simplesmente para %loadVocê pode consultar a %loaddocumentação para obter mais informações. "
26517 Michael
118

Para escrever / salvar

%%writefile myfile.py

  • escreva / salve o conteúdo da célula em myfile.py (use -apara acrescentar). Outro apelido:%%file myfile.py

Para correr

%run myfile.py

  • execute myfile.py e produz resultados na célula atual

Para carregar / importar

%load myfile.py

  • carregue "import" myfile.py na célula atual

Para mais magia e ajuda

%lsmagic

  • liste todos os outros comandos legais de magia de célula.

%COMMAND-NAME?

  • para obter ajuda sobre como usar um determinado comando. ie%run?

Nota

Além dos comandos mágicos da célula, o notebook IPython (agora notebook Jupyter) é tão legal que permite que você use qualquer comando unix diretamente da célula (isso também é equivalente ao uso do %%bashcomando magic cell).

Para executar um comando unix a partir da célula, basta preceder seu comando com !mark. por exemplo:

  • !python --version veja sua versão do python
  • !python myfile.pyexecute myfile.py e produz resultados na célula atual, da mesma forma %run(veja a diferença entre !pythone %runnos comentários abaixo).

Além disso, consulte este nbviewer para obter mais explicações com exemplos. Espero que isto ajude.

Aziz Alto
fonte
1
Obrigado, eu uso o Windows e tentei! Dir, saída !dir Volume in drive D is Documentsetc ... Portanto, não é apenas bash, mas cmd também!
brian
1
@iamaziz Eu acho que você quis dizer !python --version(erro de digitação)
Alexandre
5
Aziz, esta é uma excelente resposta. Uma pequena nota: é muito ligeiramente diferente de usar %run myfile.pyem oposição a !python myfile.py. Se você fizer o primeiro, ele será executado usando o kernel do ipython, incluindo qualquer pré-carregamento configurado. Um pequeno problema, mas hoje encontrei um bug em que fazia diferença para mim.
Tristan Reid
Se você deseja fazer o equivalente ao %run myfile.pydescrito nesta resposta ao incluir comandos mágicos de célula IPython em seu script, use %run myfile.ipy.
Wayne Wayne
8

Arraste e solte um arquivo Python na tabela "home" de notebooks Ipython e clique em fazer upload. Isso criará um novo notebook com apenas uma célula contendo o conteúdo do arquivo .py

Caso contrário, copie / cole do seu editor favorito;)

Raphaël Braud
fonte
1
Obrigado pela sua resposta, mas, como mencionei no corpo da minha postagem, pretendo evitar a criação de um novo bloco de anotações a cada vez, mas manter o script .py de dentro de uma célula de um bloco de anotações existente.
precisa saber é o seguinte
Me corrija se eu estiver errado: você não costuma usar o notebook como editor de texto? (Quero dizer: cada modificação na célula não altera o arquivo .py). By the way, eu não tenho idéia de uma maneira nativa para inserir um conteúdo .py em uma célula, eu sempre copiar / colar meu código quando necessário ... desculpe
Raphaël Braud
5

Eu achei satisfatório usar ls e cd no ipython notebook para encontrar o arquivo. Em seguida, digite cat your_file_name na célula e você receberá de volta o conteúdo do arquivo, que poderá ser colado na célula como código.

RussellStewart
fonte
!cat "file.txt"
Enrique Pérez Herrero