0Pricing
Python Academy · บทเรียน

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 และ tar
  • which และ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเรียกใช้คำสั่งด้วย subprocess
  2. การดักจับผลลัพธ์
  3. สภาพแวดล้อมและโมดูล os
  4. shutil สำหรับการดำเนินการกับไฟล์
← กลับไปที่ Python Academy