Jak ładować / edytować / uruchamiać / zapisywać pliki tekstowe (.py) w komórce notebooka IPython?

232

Niedawno przeszedłem do używania notesów IPython jako części mojego przepływu pracy. Jednak nie udało mi się znaleźć sposobu na zaimportowanie plików .py do poszczególnych komórek otwartego notesu IPython, aby można je było edytować, uruchamiać, a następnie zapisywać. Czy można to zrobić?

Znalazłem to w dokumentacji, która mówi mi, jak importować pliki .py jako nowe notebooki, ale to nie jest to, co chcę osiągnąć.

Wszelkie sugestie będą mile widziane.

aaronsstack
źródło
6
Dobre pytanie. Nie widziałem jeszcze naprawdę satysfakcjonującej odpowiedzi. Jest to szczególnie ważne w przypadku udostępniania notebooka IPython przez Internet. Jeśli ludzie chcą zobaczyć / edytować kod źródłowy importowanych funkcji (z podświetlaniem składni itp.), Nie ma obecnie łatwego sposobu na zrobienie tego. Powinno być możliwe otwieranie plików py bez przekształcania ich w pliki ipynb.
Peter

Odpowiedzi:

306

EDYCJA : Począwszy od IPython 3 (obecnie projekt Jupyter), notebook posiada edytor tekstu, który może być używany jako wygodniejsza alternatywa dla ładowania / edycji / zapisywania plików tekstowych.

Plik tekstowy można załadować do komórki notebooka za pomocą polecenia magicznego %load.

Jeśli wykonasz komórkę zawierającą:

%load filename.py

zawartość filename.pyzostanie załadowana w następnej komórce. Możesz go edytować i wykonywać jak zwykle.

Aby zapisać zawartość komórki z powrotem do pliku, dodaj magię komórki %%writefile filename.pyna początku komórki i uruchom ją. Uwaga: jeśli plik o tej samej nazwie już istnieje , zostanie po cichu nadpisany .

Aby zobaczyć pomoc dla każdego magicznego polecenia dodać ?: jak %load?albo %%writefile?.

Aby uzyskać ogólną pomoc dotyczącą funkcji magicznych, wpisz „% magic”. Aby wyświetlić listę dostępnych funkcji magicznych, użyj% lsmagic. Aby uzyskać opis dowolnego z nich, wpisz% magic_name?, Np. „% Cd?”.

Zobacz także: Funkcje magiczne z oficjalnych dokumentów IPython.

użytkownik2304916
źródło
3
To plus %save -fwydaje się być sposobem na robienie tego, czego szukałem. Dzięki!
aaronsstack
2
save -fjest rodzajem pośredniego sposobu zapisywania do pliku i działa tylko wtedy, gdy najpierw wykonasz komórkę, a następnie podasz odpowiednie odwołanie. Zasadniczo łatwiej jest używać, %%writefilektóry zapisuje bieżącą komórkę w pliku. Zaktualizowałem odpowiedź, aby o tym wspomnieć.
user2304916,
4
Nowe magiczne polecenie jest obecnie %loadpy(zamiast %load).
AlQuemist,
1
zgodnie z ipython.org/ipython-doc/3/interactive/magics.html używanie %loadjest w porządku, w przyszłości: „ %loadpy ( Alias %load ) - %loadpyzyskało pewną elastyczność i zrezygnowało z wymogu .pyrozszerzenia. Zostało ono po prostu przemianowane na %loadAby %loaduzyskać więcej informacji, możesz przejrzeć dokumentację . ”
Michael
118

Aby zapisać / zapisać

%%writefile myfile.py

  • zapisz / zapisz zawartość komórki w myfile.py (użyj -ado dołączenia). Inny alias:%%file myfile.py

Biegać

%run myfile.py

  • uruchom myfile.py, a wynik wyświetli się w bieżącej komórce

Aby załadować / zaimportować

%load myfile.py

  • załaduj plik „import” myfile.py do bieżącej komórki

Więcej magii i pomocy

%lsmagic

  • wypisz wszystkie pozostałe komendy magiczne dla komórki.

%COMMAND-NAME?

  • w celu uzyskania pomocy dotyczącej korzystania z określonego polecenia. to znaczy%run?

Uwaga

Oprócz magicznych poleceń komórki, notatnik IPython (teraz notatnik Jupyter) jest tak fajny, że pozwala na użycie dowolnego polecenia unix bezpośrednio z komórki (jest to również równoważne z użyciem %%bashmagicznego polecenia komórki).

Aby uruchomić polecenie unix z komórki, wystarczy poprzedzić polecenie !znakiem. na przykład:

  • !python --version zobacz swoją wersję Pythona
  • !python myfile.pyuruchomić myfile.py i wyjściowe wyniki w bieżącej komórce, podobnie jak %run(zobacz różnicę pomiędzy !pythoni %runw komentarzach poniżej).

Zobacz także ten nbviewer, aby uzyskać dalsze wyjaśnienia z przykładami. Mam nadzieję że to pomoże.

Aziz Alto
źródło
1
Dzięki, używam Windowsa i wypróbowałem! Dir, wyjście !dir Volume in drive D is Documentsitp. Więc nie jest to tylko bash, ale także cmd!
brian
1
@iamaziz Myślę, że miałeś na myśli !python --version(literówka)
Alexandre
5
Aziz, to doskonała odpowiedź. Jedna mała uwaga: jest nieco inna w użyciu %run myfile.pyniż w przeciwieństwie do !python myfile.py. Jeśli zrobisz to pierwsze, zostanie ono uruchomione przy użyciu jądra ipython, w tym niezależnie od skonfigurowanego wstępnego ładowania. Mały problem, ale dzisiaj wpadłem na błąd, który zrobił dla mnie różnicę.
Tristan Reid
Jeśli chcesz zrobić ekwiwalent %run myfile.pyopisany w tej odpowiedzi, włączając w skrypcie magiczne polecenia komórki IPython, użyj %run myfile.ipy.
Wayne
8

Przeciągnij i upuść plik Python w tabeli notesów „domowych” notesów Ipython, kliknij przycisk przesyłania. Spowoduje to utworzenie nowego notatnika z tylko jedną komórką zawierającą zawartość pliku .py

Jeszcze skopiuj / wklej z ulubionego edytora;)

Raphaël Braud
źródło
1
Dziękuję za odpowiedź, ale jak wspomniałem w treści mojego wpisu, staram się unikać tworzenia nowego notatnika za każdym razem, ale utrzymuję skrypt .py z komórki istniejącego notatnika.
aaronsstack
Napraw mnie, jeśli się mylę: nie chcesz używać notatnika jako edytora tekstu? (Mam na myśli: każda modyfikacja w komórce nie zmieni pliku .py). Nawiasem mówiąc, nie mam pojęcia o natywnym sposobie wstawiania zawartości .py do komórki, zawsze kopiuję / wklejam mój kod w razie potrzeby ... przepraszam
Raphaël Braud
5

Znalazłem zadowalające użycie ls i cd w ipython notebook do znalezienia pliku. Następnie wpisz cat twoja_nazwa_pliku w komórce, a otrzymasz zawartość pliku, którą następnie możesz wkleić do komórki jako kod.

RussellStewart
źródło
!cat "file.txt"
Enrique Pérez Herrero,