บางครั้งเราจำเป็นต้องเปลี่ยนชื่อไฟล์ทีละมากๆ ถ้าไฟล์มีหลักสิบก็ ok แต่ถ้าเป็นหลักร้อยขึ้นไป รับรองว่าตาเหลือกแน่นอนครับ แล้วเราจะทำเองทำไม ในเมื่อ Python ช่วยได้
ปล.บทความนี้ ใช้ Windows OS นะจ๊ะ
เปลี่ยนชื่อแค่ไฟล์เดียว
import os
old_file_name = r"documents\abc.pdf"
new_file_name = r"documents\xyz.pdf"
os.rename(old_file_name, new_file_name)
- Line 1 : นำเข้า module ที่ชื่อว่า os เพื่อช่วยในการจัดการไฟล์
- Line 3-4 : ตั้งชื่อตัวแปรให้กับไฟล์เก่าและใหม่
- ใส่ r ข้างหน้า file path เพื่อเป็นการบอกว่าไม่ต้องใช้ escape character เช่น \n เป็นการขึ้นบรรทัดใหม่ \t คือ tab
- ถ้าไม่ใช้ r สามารถใช้ \\ ได้เช่นกัน
- ถ้าไม่ใส่ทั้ง r หรือ \\ จะขึ้น error ว่า (unicode error) ?unicodeescape? codec can?t decode bytes in position 2-3: truncated \UXXXXXXXX escape
- Line 6 : เรียกใช้ method rename เพื่อเปลี่ยนชื่อไฟล์
- old_file_name คือชื่อไฟล์เก่า
- new_file_name คือชื่อไฟล์ใหม่
Note: os ย่อมาจาก operating system ซึ่งเป็น module ที่ใช้ในการจัดการ file system ที่ระบบปฏิบัติการ
เปลี่ยนชื่อมากกว่า 1 ไฟล์ ในโฟลเดอร์
กรณีนี้จะมีไฟล์ pdf ในโฟลเดอร์ที่ชื่อว่า documents ซึ่งผลที่ได้จากการประมวลผลคำสั่ง คือ

import os
for count, filename in enumerate(os.listdir("documents")):
dist = "NewFile-" + str(count) + ".pdf"
os.rename('documents/' + filename, 'documents/' + dist)
- Line 3 : ใช้ Loop for เพื่อวนดึงไฟล์ทั้งหมดในโฟลเดอร์มาประมวลผล
- enumerate คือ method ของ python ที่จะ return ตำแหน่งใน tuple และค่า ออกมา โดยจะเริ่มจากเลข 0 และค่าที่เก็บตัวเลขคือตัวแปร count
- listdir เป็น method ที่จะ return ชื่อของทุกอย่างที่อยู่ในโฟลเดอร์ที่ระบุ
- Line 4 : กำหนดชื่อไฟล์ใหม่
เปลี่ยนชื่อมากกว่า 1 ไฟล์ และใช้ชื่อบางส่วนจากไฟล์เดิม
ตัวอย่างผลลัพธ์

Note: ขอบเขตของการแก้ไขชื่อไฟล์ในลักษณะนี้คือ ชื่อไฟล์ต้องมีรูปแบบที่เหมือนกันหมด อาจจะเป็นคั่นด้วยขีดกลาง(-) จำนวน 1 ตัว เช่น license-1234.pdf
import os
os.chdir('documents')
for file in os.listdir():
f_name, f_ext = os.path.splitext(file)
f_title, f_code = f_name.split('-')
f_title = f_title.strip()
f_code = f_code.strip()
new_name = '{}_{}{}'.format(f_code, 'code', f_ext)
os.rename(file, new_name)
- Line 3 : os.chdir คือ method ที่ใช้เปลี่ยน directory ที่กำลังทำงานอยู่ ณ ขณะนี้
- Line 6 : แยกชื่อไฟล์และนามกุลไฟล์ออกจากกัน
- Line 7 : แยกชื่อไฟล์ออกจากกันด้วยขีดกลาง (-)
- Line 9-10 : ตัดช่องว่างออกจากชื่อไฟล์
- Line 12 : สร้างชื่อไฟล์ใหม่ โดยใช้ method format() ในการกำหนดรูปแบบใหม่
ขอบคุณบทความจาก
2 Replies to เปลี่ยนชื่อไฟล์ทีละเยอะๆ ด้วย Python
รบกวนสอบถามครับว่า สมุตว่าเรามีไฟล์ DCF_20230421_025-112728189-4-3_20230421210451244.pdf
แต่จะตัดไฟล์เฉพาะบางส่วน เช่น ให้เหลือเพียง 20230421-112728189-4-3.pdf และจำนวนไฟล์เยอะ ต้องเขียน python ในรูปแบบไหนครับ ขอบคุณครับ
ลองแบบนี้ก็ได้ครับ
อ่านไฟล์ pdf ใน directory และ loop
(ภายใน loop)
1.replace _ (underscore) เป็น – (dash)
2.(จากข้อ 2) split จาก – (dash) แล้วสร้างตัวแปร
3.นำตัวแปรที่ถูก split มา reformat ในรูปแบบใหม่ที่ต้องการ และเปลี่ยนชื่อ
ลองดูครับ
command line ตรวจสอบ spec ใน Windows OS
วิธีผูก วินิจฉัย (Diagnosis) กับ วัคซีน (Vaccine)
ETL ใน Data Engineering คืออะไร?
แก้ปัญหา export ภาษาไทยเพี้ยน ของ MySQL ใน phpMyAdmin
เชื่อมตารางตัวเองใน MySQL ด้วย SELF JOIN
เคล็ดลับเพิ่มประสิทธิภาพการใช้ Google Docs
เทคนิคการใช้ ChatGPT Plus ให้คุ้มค่า คุ้มราคา
เชื่อมหลายฐานข้อมูล MySQL ใน Codeigniter4