Python เปลี่ยนชื่อไฟล์และไดเร็กทอรีโดยใช้ os.rename()

⚡ สรุปอย่างชาญฉลาด

Python บทความนี้จะสอนวิธีการเปลี่ยนชื่อไฟล์และไดเร็กทอรีด้วย os.rename() คุณจะได้เรียนรู้เกี่ยวกับ os.rename(), os.renames(), shutil.move() และ pathlib Path.rename() รวมถึงวิธีการเปลี่ยนชื่อไดเร็กทอรีและเปลี่ยนชื่อไฟล์หลายไฟล์พร้อมกันด้วยตัวอย่างที่ชัดเจน

  • ✏️ os.rename(): os.rename(src, dst) ใช้สำหรับเปลี่ยนชื่อไฟล์หรือไดเร็กทอรี โดยไฟล์ต้นทางต้องมีอยู่จริง
  • 🗂️ os.renames(): ฟังก์ชัน os.renames() จะสร้างโฟลเดอร์ปลายทางที่ขาดหายไปโดยอัตโนมัติด้วย
  • 🚚 shutil.move(): shutil.move() ใช้สำหรับเปลี่ยนชื่อและย้ายไฟล์ข้ามระบบไฟล์
  • 🐍 พาธไลบรารี: Path.rename() เปลี่ยนชื่อไฟล์ด้วยวิธีเชิงวัตถุ (Python 3.4+)
  • 🤖 ความช่วยเหลือจาก AI: เครื่องมือ AI เช่น Copilot สามารถสร้างโค้ดสำหรับการเปลี่ยนชื่อและเปลี่ยนชื่อเป็นกลุ่มได้ทันที

Python เปลี่ยนชื่อไฟล์ os.rename()

Python เปลี่ยนชื่อไฟล์

Python เปลี่ยนชื่อไฟล์() เป็นวิธีที่ใช้ในการเปลี่ยนชื่อไฟล์หรือไดเร็กทอรีใน Python การเขียนโปรแกรม ที่ Python วิธีการเปลี่ยนชื่อไฟล์ () สามารถประกาศได้โดยการส่งอาร์กิวเมนต์สองตัวชื่อ src (แหล่งที่มา) และ dst (ปลายทาง)

วากยสัมพันธ์

นี่คือไวยากรณ์สำหรับวิธีการ os.rename()

os.rename(src, dst)

พารามิเตอร์

src: Source คือชื่อของไฟล์หรือไดเร็กทอรี มันควรจะมีอยู่แล้ว

เวลา: Destination คือชื่อใหม่ของไฟล์หรือไดเร็กทอรีที่คุณต้องการเปลี่ยนแปลง

ตัวอย่าง:

import os  
os.rename('guru99.txt','career.guru99.txt')

ลองดูตัวอย่างโดยละเอียด

คุณสามารถเปลี่ยนชื่อไฟล์ต้นฉบับได้ เราได้เปลี่ยนชื่อไฟล์จาก “Guruเปลี่ยนไฟล์ “99.txt” เป็น “Career.guru99.txt”

Python เปลี่ยนชื่อไฟล์

  • หากต้องการเปลี่ยนชื่อไฟล์ "guru99.txt" เราจะใช้ "ฟังก์ชันเปลี่ยนชื่อ" ในโมดูล OS
  • ดังนั้นเมื่อมีการเรียกใช้โค้ด คุณจะสังเกตเห็นว่าไฟล์ใหม่ “career.guru99.txt” ถูกสร้างขึ้นทางด้านขวาของแผง ซึ่งเราเปลี่ยนชื่อเป็นไฟล์ต้นฉบับของเรา

นี่คือรหัสที่สมบูรณ์

import os
import shutil
from os import path

def main():
	# make a duplicate of an existing file
    if path.exists("guru99.txt"):
	# get the path to the file in the current directory
        src = path.realpath("guru99.txt");
		
	# rename the original file
        os.rename('guru99.txt','career.guru99.txt') 
		
if __name__ == "__main__":
    main()

วิธีการเปลี่ยนชื่อไดเร็กทอรีใน Python

เมธอด os.rename() ยังสามารถเปลี่ยนชื่อไดเร็กทอรีได้ด้วย ไม่ใช่แค่เปลี่ยนชื่อไฟล์เท่านั้น ให้ส่งชื่อโฟลเดอร์ปัจจุบันเป็นแหล่งที่มา และชื่อใหม่เป็นปลายทาง

import os
os.rename("old_directory", "new_directory")

หากไดเร็กทอรีต้นทางไม่มีอยู่ Python จะทำให้เกิดข้อผิดพลาด FileNotFoundError ดังนั้นจึงควรตรวจสอบเส้นทางก่อนเสมอ

เปลี่ยนชื่อไฟล์โดยใช้ os.renames()

เมธอด os.renames() จะเปลี่ยนชื่อไฟล์และสร้างไดเร็กทอรีชั่วคราวที่ขาดหายไปในพาธปลายทางโดยอัตโนมัติ นอกจากนี้ยังลบไดเร็กทอรีว่างที่เหลืออยู่ในพาธต้นทางด้วย

import os
os.renames("guru99.txt", "archive/2024/career.txt")

โฟลเดอร์ archive และ 2024 จะถูกสร้างขึ้นโดยอัตโนมัติหากยังไม่มีอยู่

เปลี่ยนชื่อไฟล์โดยใช้ shutil.move()

ฟังก์ชัน shutil.move() จะย้ายไฟล์ไปยังตำแหน่งใหม่ ซึ่งจะเปลี่ยนชื่อไฟล์โดยอัตโนมัติเมื่อปลายทางอยู่ในไดเร็กทอรีเดียวกัน

import shutil
shutil.move("guru99.txt", "career.guru99.txt")

ต่างจาก os.rename() ฟังก์ชัน shutil.move() ยังสามารถย้ายไฟล์ข้ามระบบไฟล์หรือไดรฟ์ต่างๆ ได้อีกด้วย

เปลี่ยนชื่อไฟล์โดยใช้โมดูล pathlib

In Python ในเวอร์ชัน 3.4 และเวอร์ชันต่อมา โมดูล pathlib มีเมธอด Path.rename() ที่เป็นแบบเชิงวัตถุสำหรับการเปลี่ยนชื่อไฟล์

from pathlib import Path

file = Path("guru99.txt")
file.rename("career.guru99.txt")

เมธอด rename() จะส่งคืนอ็อบเจ็กต์ Path ใหม่ที่ชี้ไปยังไฟล์ที่เปลี่ยนชื่อแล้ว

วิธีการเปลี่ยนชื่อไฟล์หลายไฟล์พร้อมกัน Python

หากต้องการเปลี่ยนชื่อไฟล์จำนวนมากพร้อมกัน ให้วนลูปผ่านไฟล์ในไดเร็กทอรีโดยใช้ os.listdir() และเรียกใช้ os.rename() สำหรับแต่ละไฟล์ ตัวอย่างด้านล่างจะเพิ่มคำนำหน้าตัวเลขให้กับทุกไฟล์

import os

folder = "myfiles"
for count, filename in enumerate(os.listdir(folder)):
    new_name = f"file_{count}.txt"
    os.rename(os.path.join(folder, filename), os.path.join(folder, new_name))

การใช้ os.path.join() จะทำให้โค้ดทำงานได้อย่างถูกต้องบนระบบปฏิบัติการใดๆ ก็ตาม

คำถามที่พบบ่อย

นำเข้า os และเรียกใช้ os.rename(src, dst) โดยส่งชื่อไฟล์ปัจจุบันและชื่อใหม่เข้าไป ไฟล์ต้นฉบับต้องมีอยู่แล้ว หรือ Python ทำให้เกิดข้อผิดพลาด FileNotFoundError

os.rename() ใช้สำหรับเปลี่ยนชื่อไฟล์หรือไดเร็กทอรีเดียว ในขณะที่ os.renames() จะสร้างไดเร็กทอรีชั่วคราวที่ขาดหายไปทั้งหมด และลบโฟลเดอร์ต้นทางที่ว่างเปล่าหลังจากการย้ายเสร็จสิ้น

ใช่แล้ว shutil.move(src, dst) จะเปลี่ยนชื่อไฟล์เมื่อปลายทางอยู่ในโฟลเดอร์เดียวกัน และยังสามารถย้ายไฟล์ข้ามระบบไฟล์ที่แตกต่างกันได้ ซึ่งแตกต่างจาก os.rename()

ใช้คำสั่ง os.rename('old_dir', 'new_dir') ฟังก์ชัน os.rename() เดียวกันนี้ใช้ได้ทั้งกับไฟล์และไดเร็กทอรี ตราบใดที่ไดเร็กทอรีต้นทางมีอยู่จริง

วนลูปผ่าน os.listdir(folder) และเรียก os.rename() สำหรับแต่ละไฟล์ ใช้ os.path.join() เพื่อสร้างพาธแบบเต็มเพื่อให้โค้ดทำงานได้บนระบบปฏิบัติการใดๆ ก็ได้

ผู้ช่วย AI เช่น GitHub Copilot จะเติมข้อความอัตโนมัติสำหรับการเรียกใช้ os.rename() และ pathlib รวมถึงสร้างลูปการเปลี่ยนชื่อแบบกลุ่มจากความคิดเห็นที่อธิบายรูปแบบการตั้งชื่อที่คุณต้องการ

ใช่แล้ว เครื่องมือที่ขับเคลื่อนด้วย AI สามารถสร้างสคริปต์การเปลี่ยนชื่อแบบกลุ่มโดยอัตโนมัติ ใช้รูปแบบต่างๆ เช่น การกำหนดหมายเลขหรือคำนำหน้าวันที่ และเพิ่มการจัดการข้อผิดพลาดสำหรับชื่อที่หายไปหรือซ้ำกันได้

On Windowsคำสั่ง os.rename() จะแจ้งข้อผิดพลาด FileExistsError หากไฟล์ปลายทางมีอยู่แล้ว ในระบบ Unix คำสั่งนี้จะเขียนทับไฟล์เดิมโดยไม่แจ้งให้ทราบล่วงหน้า ตรวจสอบด้วย os.path.exists() ก่อนเพื่อป้องกันการสูญเสียข้อมูล

สรุปโพสต์นี้ด้วย: