Làm cách nào để tải / chỉnh sửa / chạy / lưu tệp văn bản (.py) vào ô sổ ghi chép IPython?


232

Gần đây tôi đã chuyển sang sử dụng máy tính xách tay IPython như một phần trong quy trình làm việc của tôi. Tuy nhiên, tôi đã không thành công trong việc tìm cách nhập tệp .py vào các ô riêng lẻ của sổ ghi chép IPython mở để chúng có thể chỉnh sửa, chạy và sau đó lưu. Điều này có thể được thực hiện?

Tôi đã tìm thấy điều này trong tài liệu hướng dẫn tôi cách nhập tệp .py dưới dạng sổ ghi chép mới nhưng điều này không đạt được những gì tôi muốn đạt được.

Bất kỳ đề xuất sẽ được nhiều đánh giá cao.


6
Câu hỏi hay. Tôi vẫn chưa thấy một câu trả lời thực sự thỏa mãn. Điều này đặc biệt quan trọng khi phục vụ một máy tính xách tay IPython qua internet. Nếu mọi người muốn xem / chỉnh sửa mã nguồn của các hàm được nhập (với tô sáng cú pháp, v.v.) thì hiện tại không có cách nào dễ dàng để làm điều đó. Có thể chỉ cần mở các tệp py mà không chuyển đổi chúng thành các tệp ipynb.
Peter

Câu trả lời:


306

EDIT : Bắt đầu từ IPython 3 (nay là dự án Jupyter), máy tính xách tay có trình soạn thảo văn bản có thể được sử dụng như một giải pháp thay thế thuận tiện hơn để tải / chỉnh sửa / lưu tệp văn bản.

Một tệp văn bản có thể được tải trong một ô máy tính xách tay bằng lệnh ma thuật %load.

Nếu bạn thực thi một ô chứa:

%load filename.py

nội dung của filename.pysẽ được tải trong ô tiếp theo. Bạn có thể chỉnh sửa và thực hiện nó như bình thường.

Để lưu nội dung ô trở lại vào một tệp, thêm ma thuật ô %%writefile filename.pyvào đầu ô và chạy nó. Xin lưu ý rằng nếu một tệp có cùng tên đã tồn tại, nó sẽ bị ghi đè âm thầm .

Để xem trợ giúp cho bất kỳ lệnh ma thuật nào, hãy thêm ?: like %load?hoặc %%writefile?.

Để được trợ giúp chung về các hàm ma thuật, gõ "% ma thuật" Để biết danh sách các hàm ma thuật có sẵn, hãy sử dụng% lsmagic. Để biết mô tả về bất kỳ ai trong số họ, hãy nhập% magic_name?, Ví dụ: '% cd?'.

Xem thêm: Các hàm ma thuật từ các tài liệu IPython chính thức.


3
Điều này, cộng với %save -fdường như là cách để làm những gì tôi đang tìm kiếm. Cảm ơn!
aaronsstack

2
save -flà một cách lưu gián tiếp vào một tệp và sẽ chỉ hoạt động nếu bạn thực thi ô trước và sau đó cung cấp tham chiếu đúng. Nói chung, dễ dàng hơn để sử dụng %%writefileghi ô hiện tại vào một tệp. Tôi cập nhật câu trả lời để đề cập đến điều này.
dùng2304916

4
Lệnh ma thuật mới hiện đang %loadpy(thay vì %load).
AlQuemist

1
theo ipython.org/ipython-doc/3/interactive/magics.html sử dụng %loadlà tốt, đi tiếp: " %loadpy ( Bí danh %load ) - %loadpyđã đạt được một số linh hoạt và bỏ yêu cầu của một .pytiện ích mở rộng. Vì vậy, nó đã được đổi tên đơn giản thành %loadBạn có thể nhìn vào %loadchuỗi doc để biết thêm thông tin. "
michael

118

Để viết / lưu

%%writefile myfile.py

  • ghi / lưu nội dung ô vào myfile.py (sử dụng -ađể chắp thêm). Một bí danh khác:%%file myfile.py

Chạy

%run myfile.py

  • chạy myfile.py và kết quả đầu ra trong ô hiện tại

Để tải / nhập

%load myfile.py

  • tải "nhập" myfile.py vào ô hiện tại

Để biết thêm phép thuật và giúp đỡ

%lsmagic

  • liệt kê tất cả các lệnh ma thuật tế bào mát mẻ khác.

%COMMAND-NAME?

  • để được giúp đỡ về cách sử dụng một lệnh nhất định. I E%run?

Ghi chú

Bên cạnh các lệnh ma thuật di động, máy tính xách tay IPython (hiện là máy tính xách tay Jupyter) rất tuyệt đến nỗi nó cho phép bạn sử dụng bất kỳ lệnh unix nào ngay từ ô (điều này cũng tương đương với việc sử dụng %%bashlệnh ma thuật di động).

Để chạy lệnh unix từ ô, chỉ cần đặt trước lệnh của bạn bằng !dấu. ví dụ:

  • !python --version xem phiên bản trăn của bạn
  • !python myfile.pychạy myfile.py và kết quả đầu ra trong ô hiện tại, giống như %run(xem sự khác biệt giữa !python%runtrong các bình luận bên dưới).

Ngoài ra, hãy xem nbviewer này để được giải thích thêm với các ví dụ. Hi vọng điêu nay co ich.


1
Cảm ơn, tôi đã sử dụng windows và đã thử! Dir, đầu ra, !dir Volume in drive D is Documentsv.v ... Vì vậy, nó không chỉ là bash mà còn là cmd!
brian

1
@iamaziz Tôi nghĩ bạn có nghĩa là !python --version(typo)
Alexandre

5
Aziz, đây là một câu trả lời tuyệt vời. Một lưu ý nhỏ: sử dụng %run myfile.pytrái ngược với nó !python myfile.py. Nếu bạn thực hiện trước thì nó sẽ thực thi bằng kernel ipython, bao gồm mọi thứ tải trước được cấu hình. Một vấn đề nhỏ, nhưng hôm nay tôi gặp phải một lỗi mà nó tạo ra sự khác biệt cho tôi.
Tristan Reid

Nếu bạn muốn làm tương đương với %run myfile.pymô tả trong câu trả lời này trong khi bao gồm các lệnh ma thuật tế bào IPython trong tập lệnh của bạn, hãy sử dụng %run myfile.ipy.
Wayne

8

Kéo và thả tệp Python vào bảng sổ ghi chép "nhà" của sổ ghi chép Ipython, nhấp vào tải lên. Điều này sẽ tạo một sổ ghi chép mới chỉ có một ô chứa nội dung tệp .py của bạn

Khác sao chép / dán từ trình chỉnh sửa yêu thích của bạn;)


1
Cảm ơn câu trả lời của bạn, nhưng như tôi đã đề cập trong phần thân bài viết của mình, tôi đang tìm cách tránh tạo sổ ghi chép mới mỗi lần nhưng duy trì tập lệnh .py từ trong một ô của sổ ghi chép hiện có.
aaronsstack

Khắc phục tôi nếu tôi sai: bạn không muốn sử dụng sổ ghi chép làm trình soạn thảo văn bản? (Ý tôi là: mỗi sửa đổi trong ô sẽ không thay đổi tệp .py). Nhân tiện, tôi không biết cách nào để chèn nội dung .py vào một ô, tôi luôn sao chép / dán mã của mình khi cần ... xin lỗi
Raphaël Braud

5

Tôi đã tìm thấy thỏa đáng khi sử dụng ls và cd trong ipython notebook để tìm tệp. Sau đó nhập cat your_file_name vào ô và bạn sẽ lấy lại nội dung của tệp, sau đó bạn có thể dán vào ô dưới dạng mã.


!cat "file.txt"
Enrique Pérez Herrero
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.