วิธีโหลด / แก้ไข / เรียกใช้ / บันทึกไฟล์ข้อความ (.py) ลงในเซลล์โน๊ตบุ๊ค IPython ได้อย่างไร


232

ฉันเพิ่งย้ายไปใช้โน๊ตบุ๊ค IPython เป็นส่วนหนึ่งของเวิร์กโฟลว์ของฉัน อย่างไรก็ตามฉันไม่ประสบความสำเร็จในการค้นหาวิธีการนำเข้าไฟล์. py ลงในแต่ละเซลล์ของโน้ตบุ๊ก IPython แบบเปิดเพื่อให้สามารถแก้ไขเรียกใช้และบันทึกแล้ว สามารถทำได้หรือไม่

ฉันพบสิ่งนี้ในเอกสารซึ่งบอกวิธีการนำเข้าไฟล์. py เป็นโน้ตบุ๊กใหม่ แต่สิ่งนี้ไม่ตรงตามที่ฉันต้องการ

ข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชมมาก


6
คำถามที่ดี. ฉันยังไม่เห็นคำตอบที่น่าพอใจจริงๆ เป็นสิ่งสำคัญอย่างยิ่งเมื่อให้บริการโน้ตบุ๊ก IPython ผ่านทางอินเทอร์เน็ต หากผู้คนต้องการดู / แก้ไขซอร์สโค้ดของฟังก์ชั่นที่นำเข้า (ด้วยการเน้นไวยากรณ์ ฯลฯ ) ในขณะนี้ไม่มีวิธีที่ง่ายในการทำ มันควรจะเป็นไปได้ที่จะเปิดไฟล์ py โดยไม่ต้องแปลงเป็นไฟล์ ipynb
ปีเตอร์

คำตอบ:


306

แก้ไข : เริ่มจาก IPython 3 (ตอนนี้โครงการ Jupyter) โน้ตบุ๊กมีโปรแกรมแก้ไขข้อความที่สามารถใช้เป็นทางเลือกที่สะดวกกว่าในการโหลด / แก้ไข / บันทึกไฟล์ข้อความ

%loadไฟล์ข้อความสามารถโหลดได้ในเซลล์โน้ตบุ๊คที่มีคำสั่งมายากล

หากคุณเรียกใช้เซลล์ที่มี:

%load filename.py

เนื้อหาของfilename.pyจะถูกโหลดในเซลล์ถัดไป คุณสามารถแก้ไขและดำเนินการตามปกติ

ในการบันทึกเนื้อหาของเซลล์กลับเข้าไปในไฟล์เพิ่มเซลล์วิเศษ%%writefile filename.pyที่จุดเริ่มต้นของเซลล์และเรียกใช้ ระวังว่าถ้าแฟ้มที่มีชื่อเดียวกันอยู่แล้วว่ามันจะถูกเขียนทับเงียบ

เพื่อดูความช่วยเหลือสำหรับคำสั่งเวทมนตร์ใด ๆ เพิ่ม?: เหมือนหรือ%load?%%writefile?

สำหรับความช่วยเหลือทั่วไปเกี่ยวกับฟังก์ชั่นเวทย์มนตร์พิมพ์ "% magic" สำหรับรายการฟังก์ชั่นเวทย์มนตร์ที่มีอยู่ให้ใช้% lsmagic สำหรับคำอธิบายใด ๆ ของพวกเขาให้พิมพ์% magic_name ?, เช่น '% cd?'

ดูเพิ่มเติม: ฟังก์ชั่นเวทย์มนตร์จากเอกสาร IPython อย่างเป็นทางการ


3
สิ่งนี้บวกกับ%save -fน่าจะเป็นวิธีการทำสิ่งที่ฉันกำลังมองหา ขอบคุณ!
aaronsstack

2
save -fเป็นวิธีทางอ้อมในการบันทึกลงในไฟล์และจะทำงานได้ก็ต่อเมื่อคุณเรียกใช้เซลล์ก่อนแล้วจึงให้การอ้างอิงที่ถูกต้อง โดยทั่วไปแล้วจะใช้งานง่ายกว่าซึ่งจะ%%writefileเขียนเซลล์ปัจจุบันลงในไฟล์ ฉันอัพเดตคำตอบเพื่อพูดถึงสิ่งนี้
2304916

4
ขณะนี้คำสั่งเวทมนต์ใหม่%loadpy(แทน%load)
AlQuemist

1
ตามipython.org/ipython-doc/3/interactive/magics.html การใช้งาน%loadทำได้ดีมากไปข้างหน้า: " %loadpy ( นามแฝง %load ) - %loadpyได้รับความยืดหยุ่นและลดความต้องการของ.pyส่วนขยายดังนั้นจึงได้เปลี่ยนชื่อเป็นเพียงแค่%loadคุณสามารถดู%loadข้อมูลเพิ่มเติมได้ที่docstring "
ไมเคิล

118

เพื่อเขียน / บันทึก

%%writefile myfile.py

  • เขียน / บันทึกเนื้อหาของเซลล์ลงใน myfile.py (ใช้-aเพื่อต่อท้าย) อีกนามแฝง:%%file myfile.py

วิ่ง

%run myfile.py

  • เรียกใช้ myfile.py และผลลัพธ์ผลลัพธ์ในเซลล์ปัจจุบัน

เพื่อโหลด / นำเข้า

%load myfile.py

  • โหลด "นำเข้า" myfile.py ลงในเซลล์ปัจจุบัน

สำหรับเวทมนตร์และความช่วยเหลือเพิ่มเติม

%lsmagic

  • แสดงรายการคำสั่งเวทมนต์มือถืออื่น ๆ ทั้งหมด

%COMMAND-NAME?

  • สำหรับความช่วยเหลือเกี่ยวกับวิธีใช้คำสั่งบางอย่าง กล่าวคือ%run?

บันทึก

นอกจากคำสั่งเซลล์มายากล IPython โน้ตบุ๊ค (ตอนนี้ Jupyter โน๊ตบุ๊ค) เพื่อให้เย็นที่จะช่วยให้คุณใช้ใด ๆ ยูนิกซ์คำสั่งที่ถูกต้องจากเซลล์ (นี้เป็นยังเทียบเท่ากับการใช้%%bashคำสั่งเซลล์มายากล)

ในการเรียกใช้คำสั่ง unix จากเซลล์เพียงนำหน้าคำสั่งของคุณด้วย!เครื่องหมาย ตัวอย่างเช่น:

  • !python --version ดูรุ่นหลามของคุณ
  • !python myfile.pyเรียกใช้ myfile.py และผลลัพธ์ผลลัพธ์ในเซลล์ปัจจุบันเหมือน%run(ดูความแตกต่างระหว่าง!pythonและ%runในความคิดเห็นด้านล่าง)

ดูที่nbviewer นี้สำหรับคำอธิบายเพิ่มเติมพร้อมตัวอย่าง หวังว่านี่จะช่วยได้


1
ขอบคุณฉันใช้ windows และพยายาม! dir เอาท์พุท!dir Volume in drive D is Documentsฯลฯ ... ดังนั้นมันจึงไม่ใช่แค่ทุบตี แต่เป็น cmd ด้วย!
ไบรอัน

1
@iamaziz ฉันคิดว่าคุณหมายถึง!python --version(typo)
Alexandre

5
Aziz นี่เป็นคำตอบที่ยอดเยี่ยม หนึ่งทราบขนาดเล็ก: มันมากแตกต่างกันเล็กน้อยที่จะใช้เมื่อเทียบกับ%run myfile.py !python myfile.pyหากคุณทำแบบเดิมมันจะดำเนินการโดยใช้เคอร์เนล ipython รวมถึงการกำหนดค่าการโหลดล่วงหน้าใด ๆ ปัญหาเล็ก ๆ แต่ฉันพบข้อบกพร่องในวันนี้ซึ่งทำให้เกิดความแตกต่างสำหรับฉัน
อุโมงค์ Reid

หากคุณต้องการที่จะทำเทียบเท่าของ%run myfile.pyที่อธิบายไว้ในคำตอบนี้ในขณะที่รวมทั้งคำสั่ง IPython %run myfile.ipyเซลล์มายากลในสคริปต์ของคุณใช้
เวย์น

8

ลากและวางไฟล์ Python ในตารางสมุดบันทึก Ipython สำหรับโน้ตบุ๊ก "โฮม" คลิกอัปโหลด สิ่งนี้จะสร้างสมุดบันทึกใหม่โดยมีเพียงเซลล์เดียวที่มีเนื้อหาไฟล์. py ของคุณ

คัดลอก / วางจากตัวแก้ไขที่คุณชื่นชอบ;)


1
ขอบคุณสำหรับการตอบกลับของคุณ แต่ตามที่ได้กล่าวไว้ในเนื้อหาของโพสต์ของฉันฉันต้องการหลีกเลี่ยงการสร้างสมุดบันทึกใหม่ทุกครั้ง แต่ยังคงสคริปต์. py ไว้ภายในเซลล์ของสมุดบันทึกที่มีอยู่
aaronsstack

แก้ไขฉันถ้าฉันผิดคุณไม่เคยใช้สมุดบันทึกเป็นเครื่องมือแก้ไขข้อความใช่ไหม (ฉันหมายถึง: การแก้ไขแต่ละครั้งในเซลล์จะไม่เปลี่ยนไฟล์. py) โดยวิธีการที่ฉันไม่มีเงื่อนงำวิธีพื้นเมืองในการแทรกเนื้อหา. py ในเซลล์ฉันมักจะคัดลอก / วางรหัสของฉันเมื่อจำเป็น ... ขอโทษ
Raphaël Braud

5

ฉันพบว่าเป็นที่น่าพอใจเมื่อใช้ ls และ cd ในสมุดบันทึก ipython เพื่อค้นหาไฟล์ จากนั้นพิมพ์ cat your_file_name ลงในเซลล์และคุณจะได้รับเนื้อหาของไฟล์กลับมาซึ่งคุณสามารถวางลงในเซลล์เป็นรหัสได้


!cat "file.txt"
Enrique Pérez Herrero
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.