shutil สำหรับการดำเนินการกับไฟล์
คัดลอก ย้าย และจัดเก็บไฟล์
shutil สำหรับการดำเนินการกับไฟล์ เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
shutil คืออะไร
โมดูล shutil (เครื่องมือสำหรับเชลล์) มีการดำเนินการกับไฟล์ระดับสูงที่สำคัญ ได้แก่ การคัดลอก การย้าย การลบโครงสร้างไดเรกทอรี และการสร้างไฟล์จัดเก็บ โดยต่อยอดจาก os สำหรับงานทั่วไป
import shutil, os
os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/a.txt', 'w') as f:
f.write('hello')
print('created a.txt')การคัดลอกไฟล์
shutil.copy(src, dst) คัดลอกเนื้อหาไฟล์และบิตสิทธิ์ไปยังตำแหน่งใหม่
import shutil, os
os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/src.txt', 'w') as f:
f.write('data')
shutil.copy('/tmp/shutil_demo/src.txt', '/tmp/shutil_demo/copy.txt')
print(os.path.exists('/tmp/shutil_demo/copy.txt'))copy เทียบกับ copy2
shutil.copy2 ทำงานคล้ายกับ copy แต่ยังรักษาข้อมูลเมตา เช่น ค่าเวลาไว้ด้วย โปรดใช้เมื่อต้องคงเวลาที่แก้ไขไฟล์ไว้
import shutil, os
os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/m.txt', 'w') as f:
f.write('x')
shutil.copy2('/tmp/shutil_demo/m.txt', '/tmp/shutil_demo/m2.txt')
print('copied with metadata')การคัดลอกโครงสร้างทั้งหมด
shutil.copytree(src, dst) คัดลอกไดเรกทอรีทั้งหมดแบบเรียกซ้ำ โดยปลายทางต้องยังไม่มีอยู่ก่อนแล้ว (เว้นแต่จะส่ง dirs_exist_ok=True)
import shutil, os
os.makedirs('/tmp/tree_src/sub', exist_ok=True)
with open('/tmp/tree_src/sub/f.txt', 'w') as f:
f.write('hi')
shutil.rmtree('/tmp/tree_dst', ignore_errors=True)
shutil.copytree('/tmp/tree_src', '/tmp/tree_dst')
print(os.path.exists('/tmp/tree_dst/sub/f.txt'))การย้ายไฟล์และโฟลเดอร์
shutil.move(src, dst) ย้าย (หรือเปลี่ยนชื่อ) ไฟล์หรือไดเรกทอรี โดยทำงานข้ามระบบไฟล์ได้ ในกรณีที่ os.rename จะทำงานล้มเหลว
import shutil, os
os.makedirs('/tmp/move_demo', exist_ok=True)
with open('/tmp/move_demo/old.txt', 'w') as f:
f.write('move me')
shutil.move('/tmp/move_demo/old.txt', '/tmp/move_demo/new.txt')
print(os.path.exists('/tmp/move_demo/new.txt'))การลบโครงสร้างไดเรกทอรี
shutil.rmtree(path) ลบไดเรกทอรีและทุกอย่างภายใน โปรดใช้อย่างระมัดระวัง เนื่องจากไม่สามารถเลิกทำได้
import shutil, os
os.makedirs('/tmp/to_delete/inner', exist_ok=True)
shutil.rmtree('/tmp/to_delete')
print('exists after rmtree:', os.path.exists('/tmp/to_delete'))ignore_errors และความปลอดภัย
การส่ง ignore_errors=True ให้กับ rmtree จะป้องกันไม่ให้โปรแกรมหยุดทำงานเมื่อไม่พบเส้นทาง ซึ่งมีประโยชน์สำหรับการล้างข้อมูลก่อนเริ่มทำงานใหม่
import shutil
shutil.rmtree('/tmp/never_existed', ignore_errors=True)
print('no error even though path was absent')การสร้างไฟล์จัดเก็บ
shutil.make_archive(base_name, format, root_dir) รวมไดเรกทอรีเป็นไฟล์ zip หรือ tar ได้ด้วยการเรียกใช้ครั้งเดียว
import shutil, os
os.makedirs('/tmp/arch_src', exist_ok=True)
with open('/tmp/arch_src/data.txt', 'w') as f:
f.write('archive me')
path = shutil.make_archive('/tmp/my_archive', 'zip', '/tmp/arch_src')
print('created', os.path.basename(path))การแตกไฟล์จัดเก็บ
shutil.unpack_archive(filename, extract_dir) ทำขั้นตอนย้อนกลับ โดยแตกไฟล์ zip หรือ tar ลงในโฟลเดอร์
import shutil, os
shutil.make_archive('/tmp/box', 'zip', '/tmp/arch_src')
shutil.unpack_archive('/tmp/box.zip', '/tmp/unpacked')
print(os.listdir('/tmp/unpacked'))การค้นหาโปรแกรมที่เรียกใช้ได้
shutil.which(name) ค้นหาโปรแกรมใน PATH ของระบบ เช่นเดียวกับคำสั่ง which ของเชลล์ โดยคืนค่าเส้นทางแบบเต็มหรือ None
import shutil
print(shutil.which('python3'))
print(shutil.which('definitely_not_a_real_program'))การใช้พื้นที่ดิสก์
shutil.disk_usage(path) รายงานจำนวนไบต์ทั้งหมด ไบต์ที่ใช้ไป และไบต์ที่ว่างของระบบไฟล์ที่มีเส้นทางนั้นอยู่
import shutil
usage = shutil.disk_usage('/')
print('total GB:', round(usage.total / 1e9, 1))
print('free GB:', round(usage.free / 1e9, 1))ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับ shutil
ทบทวน
คุณได้เรียนรู้การใช้ shutil สำหรับการดำเนินการกับไฟล์:
copy/copy2ใช้คัดลอกไฟล์ ส่วนcopytreeใช้คัดลอกโครงสร้างทั้งหมดmoveใช้เปลี่ยนชื่อหรือย้ายตำแหน่ง ส่วนrmtreeใช้ลบโครงสร้างmake_archive/unpack_archiveใช้จัดการไฟล์ zip และ tarwhichและdisk_usageใช้สอบถามข้อมูลของระบบ
หลักสูตรถัดไป: การสร้างเครื่องมือบรรทัดคำสั่งด้วย argparse
คำถามที่พบบ่อย
บทเรียน “shutil สำหรับการดำเนินการกับไฟล์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “shutil สำหรับการดำเนินการกับไฟล์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “shutil สำหรับการดำเนินการกับไฟล์”
คัดลอก ย้าย และจัดเก็บไฟล์ คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “shutil สำหรับการดำเนินการกับไฟล์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเรียกใช้คำสั่งด้วย subprocess
- การดักจับผลลัพธ์
- สภาพแวดล้อมและโมดูล os
- shutil สำหรับการดำเนินการกับไฟล์