Bagaimana cara memuat / mengedit / menjalankan / menyimpan file teks (.py) ke dalam sel notebook IPython?

232

Saya baru-baru ini pindah menggunakan notebook IPython sebagai bagian dari alur kerja saya. Namun, saya belum berhasil menemukan cara untuk mengimpor file .py ke dalam sel individual notebook IPython yang terbuka sehingga mereka dapat diedit, dijalankan, dan disimpan. Bisakah ini dilakukan?

Saya menemukan ini di dokumentasi yang memberi tahu saya cara mengimpor file .py sebagai buku catatan baru tetapi ini kurang dari apa yang ingin saya capai.

Setiap saran akan sangat dihargai.

aaronsstack
sumber
6
Pertanyaan bagus. Saya belum melihat jawaban yang benar-benar memuaskan. Ini sangat penting ketika menyajikan notebook IPython melalui internet. Jika orang ingin melihat / mengedit kode sumber fungsi yang diimpor (dengan penyorotan sintaks, dll) saat ini tidak ada cara mudah untuk melakukannya. Seharusnya dimungkinkan untuk hanya membuka file py tanpa mengubahnya menjadi file ipynb.
Peter

Jawaban:

306

EDIT : Mulai dari IPython 3 (sekarang proyek Jupyter), notebook memiliki editor teks yang dapat digunakan sebagai alternatif yang lebih nyaman untuk memuat / mengedit / menyimpan file teks.

File teks dapat dimuat dalam sel buku catatan dengan perintah ajaib %load.

Jika Anda menjalankan sel yang mengandung:

%load filename.py

konten filename.pyakan dimuat di sel berikutnya. Anda dapat mengedit dan menjalankannya seperti biasa.

Untuk menyimpan konten sel kembali ke file, tambahkan keajaiban sel %%writefile filename.pydi awal sel dan jalankan. Berhati-hatilah bahwa jika file dengan nama yang sama sudah ada maka akan ditimpa secara diam-diam .

Untuk melihat bantuan untuk perintah sihir, tambahkan ?: like %load?atau %%writefile?.

Untuk bantuan umum tentang fungsi sulap, ketik "% magic" Untuk daftar fungsi sulap yang tersedia, gunakan% lsmagic. Untuk deskripsi salah satunya, ketikkan% magic_name ?, misalnya '% cd?'

Lihat juga: Fungsi sulap dari dokumen IPython resmi.

pengguna2304916
sumber
3
Ini, ditambah %save -ftampaknya menjadi cara untuk melakukan apa yang saya cari. Terima kasih!
aaronsstack
2
save -fadalah semacam cara tidak langsung menyimpan ke dalam file dan hanya akan berfungsi jika Anda mengeksekusi sel terlebih dahulu dan kemudian memberikan referensi yang tepat. Secara umum lebih mudah digunakan untuk %%writefilemenulis sel saat ini ke dalam file. Saya memperbarui jawaban untuk menyebutkan ini.
user2304916
4
Perintah sihir baru saat ini %loadpy(bukan %load).
AlQuemist
1
menurut ipython.org/ipython-doc/3/interactive/magics.html menggunakan %loadtidak apa-apa, maju: " %loadpy ( Alias ​​of %load ) - %loadpytelah mendapatkan beberapa fleksibilitas dan menjatuhkan persyaratan .pyperpanjangan. Jadi, itu telah diubah namanya menjadi %loadAnda dapat melihat %loaddocstring untuk info lebih lanjut. "
Michael
118

Untuk menulis / menyimpan

%%writefile myfile.py

  • tulis / simpan konten sel ke myfile.py (gunakan -auntuk menambahkan). Alias ​​lain:%%file myfile.py

Untuk berlari

%run myfile.py

  • jalankan myfile.py dan hasil output di sel saat ini

Untuk memuat / mengimpor

%load myfile.py

  • memuat "impor" myfile.py ke sel saat ini

Untuk lebih banyak sihir dan bantuan

%lsmagic

  • daftar semua perintah sihir sel keren lainnya.

%COMMAND-NAME?

  • untuk bantuan tentang cara menggunakan perintah tertentu. yaitu%run?

Catatan

Di samping perintah sihir sel, notebook IPython (sekarang notebook Jupyter) sangat keren sehingga memungkinkan Anda untuk menggunakan perintah unix langsung dari sel (ini juga setara dengan menggunakan %%bashperintah sihir sel).

Untuk menjalankan perintah unix dari sel, cukup awali perintah Anda dengan !tanda. sebagai contoh:

  • !python --version lihat versi python Anda
  • !python myfile.pyjalankan myfile.py dan hasil output di sel saat ini, sama seperti %run(lihat perbedaan antara !pythondan %rundi komentar di bawah).

Juga, lihat nbviewer ini untuk penjelasan lebih lanjut dengan contoh-contoh. Semoga ini membantu.

Aziz Alto
sumber
1
Terima kasih, saya menggunakan windows dan mencoba! Dir, output !dir Volume in drive D is Documentsdll ... Jadi bukan hanya bash tetapi cmd juga!
brian
1
@ iamaziz Saya pikir Anda maksud !python --version(salah ketik)
Alexandre
5
Aziz, ini jawaban yang bagus. Satu catatan kecil: sangat sedikit berbeda untuk digunakan %run myfile.pysebagai lawan !python myfile.py. Jika Anda melakukan yang pertama itu akan dijalankan menggunakan kernel ipython, termasuk preloading apa pun yang dikonfigurasi. Masalah kecil, tapi saya bertemu bug hari ini di mana itu membuat perbedaan bagi saya.
Tristan Reid
Jika Anda ingin melakukan hal yang sama seperti yang %run myfile.pydijelaskan dalam jawaban ini sambil menyertakan perintah sihir sel IPython dalam skrip Anda, gunakan %run myfile.ipy.
Wayne
8

Seret dan jatuhkan file Python di tabel notebook "home" notebook Ipython, klik unggah. Ini akan membuat buku catatan baru dengan hanya satu sel yang berisi konten file .py Anda

Salin / tempelkan yang lain dari editor favorit Anda;)

Raphaël Braud
sumber
1
Terima kasih atas balasan Anda, tetapi seperti yang saya sebutkan di bagian postingan saya, saya berusaha untuk tidak membuat notebook baru setiap kali tetapi menjaga skrip .py dari dalam sel notebook yang ada.
aaronsstack
Perbaiki saya jika saya salah: Anda tidak ingin menggunakan notebook sebagai editor teks? (Maksud saya: setiap modifikasi dalam sel tidak akan mengubah file .py). Ngomong-ngomong, saya tidak memiliki petunjuk tentang cara asli untuk menyisipkan konten .py ke dalam sel, saya selalu menyalin / menempelkan kode saya saat diperlukan ... maaf
Raphaël Braud
5

Saya merasa puas menggunakan ls dan cd di dalam notebook ipython untuk menemukan file. Kemudian ketik cat your_file_name ke dalam sel, dan Anda akan mendapatkan kembali konten file, yang kemudian dapat Anda tempelkan ke sel sebagai kode.

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