บางครั้งเราจำเป็นต้องเปลี่ยนชื่อไฟล์ทีละมากๆ ถ้าไฟล์มีหลักสิบก็ 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 ในรูปแบบใหม่ที่ต้องการ และเปลี่ยนชื่อ
ลองดูครับ
ขั้นตอนการติดตั้ง Vuetify ใน Laravel
3 เทคนิค เพิ่มความเร็วใน Laravel
ฟังก์ชันวันเวลาที่น่าสนใจใน MySQL
เคล็ดลับการเรียงลำดับข้อมูลใน MySQL
เชื่อมตารางตัวเองใน MySQL ด้วย SELF JOIN
เคล็ดลับเพิ่มประสิทธิภาพการใช้ Google Docs
เทคนิคการใช้ ChatGPT Plus ให้คุ้มค่า คุ้มราคา
เชื่อมหลายฐานข้อมูล MySQL ใน Codeigniter4