เปลี่ยนชื่อเป็นกลุ่มโดยใช้โมดูลระบบปฏิบัติการและโมดูล glob
ใช้โมดูลระบบปฏิบัติการและโมดูล glob เพื่อเปลี่ยนและเปลี่ยนชื่อไฟล์ในโฟลเดอร์เป็นกลุ่มโดยเพิ่มสตริงหรือหมายเลขตามลำดับก่อนและหลังชื่อไฟล์
โครงสร้างไฟล์ตัวอย่าง
ใช้โครงสร้างไฟล์ต่อไปนี้เป็นตัวอย่าง ในกรณีนี้จะถือว่ามีเพียงไฟล์ (ไม่มีโฟลเดอร์) ในโฟลเดอร์
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
สิ่งที่ควรทราบ
เนื่องจากกระบวนการเกี่ยวข้องกับการเปลี่ยนชื่อไฟล์ ให้บันทึกไฟล์ต้นฉบับแยกกันเพื่อให้สามารถบันทึกได้ในกรณีที่เกิดความล้มเหลว
รับรายการไฟล์ด้วยโมดูล glob
โมดูล glob จะค้นหาชื่อพาธทั้งหมดที่ตรงกับรูปแบบที่ระบุตามกฎที่ใช้โดยเชลล์ Unix
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
ตัวอย่างเช่น สามารถใช้ฟังก์ชันต่อไปนี้เพื่อรับรายชื่อไฟล์และชื่อไดเร็กทอรีในไดเร็กทอรีปัจจุบันglob.glob('./*')
อาร์กิวเมนต์อาจเป็นเส้นทางสัมบูรณ์หรือเส้นทางสัมพัทธ์
ในตัวอย่างนี้ จะมีลักษณะดังนี้
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
แทนที่จะเป็น a.jpg คุณสามารถรับสิ่งต่อไปนี้โดยเพิ่มเส้นทางอาร์กิวเมนต์./testdir/a.jpg
คุณยังสามารถใช้สัญลักษณ์แทน (*) เพื่อรับเฉพาะส่วนขยายที่ระบุดังที่แสดงด้านล่างglob.glob('./testdir/*.jpg')
สามารถใช้การจับคู่รูปแบบต่อไปนี้ได้
*
: จับคู่ทุกอย่าง?
ตรงกับอักขระตัวเดียว[abc]
: จับคู่อักขระตัวเดียวจาก a, b หรือ c[!abc]
: จับคู่อักขระตัวเดียวที่ไม่ใช่ a, b หรือ c
เปลี่ยนชื่อด้วย os.rename()
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
เปลี่ยนชื่อไฟล์หรือไดเร็กทอรี src เป็น dst
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
ใช้ฟังก์ชัน rename() ของโมดูล os ซึ่งจะเปลี่ยนชื่อตามชื่อที่แนะนำ
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
จากนั้น a.jpg จะถูกเปลี่ยนชื่อเป็น a_000.jpg
การสร้างหมายเลขลำดับที่เติมศูนย์ด้วย str.format()
ตัวอย่างเช่น เมื่อเพิ่มหมายเลขตามลำดับลงในไฟล์หลายสิบไฟล์ เราต้องการใช้ “00” หรือ “11” แทน “0” หรือ “1” หากคุณต้องการเติมเลขศูนย์ด้วยวิธีนี้ ให้ใช้เมธอด str.format()
str.format(args,*ควาร์ก)
ดำเนินการจัดรูปแบบสตริง สตริงที่เรียกใช้เมธอดนี้สามารถมีอักขระปกติหรือฟิลด์แทนที่คั่นด้วย {}Built-in Types — Python 3.10.0 Documentation
ไวยากรณ์ของสตริงข้อกำหนดรูปแบบ
สตริงการจัดรูปแบบมี “ฟิลด์การแทนที่” ที่อยู่ในวงเล็บปีกกา {}ไวยากรณ์ของฟิลด์การแทนที่มีดังนี้:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
ในแง่ที่ง่ายกว่า ฟิลด์การแทนที่จะเริ่มต้นด้วย field_name ซึ่งทำให้ค่าของอ็อบเจ็กต์ที่ระบุถูกจัดรูปแบบและแทรกลงในเอาต์พุตแทนที่จะเป็นฟิลด์แทนที่ หลังจาก field_name ฟิลด์การแปลงสามารถตามด้วยเครื่องหมายอัศเจรีย์ ‘! หลังจาก field_name ฟิลด์การแปลงสามารถตามด้วยเครื่องหมายอัศเจรีย์ ‘! format_spec สามารถเขียนด้วยโคลอน ‘:’ ต่อท้าย ระบุรูปแบบที่ไม่ใช่ค่าเริ่มต้นของค่าที่จะถูกแทนที่
string — Common string operations — Python 3.10.0 Documentation
หากคุณต้องการเติม 0 ในตอนนี้ ให้ทำดังต่อไปนี้
# 3を2桁でゼロ埋め print('{0:02d}'.format(3)) # => 03 # Fill in the zeros with three and four digits for 4 and 6, respectively. print('{0:03d}, {1:04d}'.format(4, 6)) # => 004, 0006
ตัวอย่างโค้ดเพิ่มสตริง/หมายเลขลำดับก่อนไฟล์
ขั้นแรก รับชื่อไฟล์ด้วย os.path.basename() จากนั้น เพิ่มสตริงหรือหมายเลขลำดับหน้าชื่อไฟล์ และเชื่อมกับเส้นทางเดิมด้วย os.path.join()
ตัวอย่างต่อไปนี้จะเพิ่ม img_ ไว้ข้างหน้าชื่อไฟล์ทั้งหมด
import os import glob path = "./testdir" files = glob.glob(path + '/*') for f in files: os.rename(f, os.path.join(path, 'img_' + os.path.basename(f)))
ผลลัพธ์จะเป็นดังนี้
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
หากคุณต้องการเพิ่มตัวเลขตามลำดับ ให้เปลี่ยนคำสั่ง for เป็นดังนี้: enumerate() เพื่อให้นับตัวเลขตามลำดับจาก 0 ในกรณีนี้ ตัวเลขจะเติมด้วยตัวเลขสามหลัก
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
นี่คือผลลัพธ์
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
หากคุณต้องการเริ่มต้นด้วย 1 แทนที่จะเป็น 0 ให้ตั้งค่าอาร์กิวเมนต์ที่สองของการแจกแจงเป็น 1
for i, f in enumerate(files, 1): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
มันไปแบบนี้
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
ตัวอย่างโค้ดสำหรับเพิ่มสตริง/หมายเลขลำดับหลังไฟล์
ใช้ os.path.splitext() เพื่อแยกไฟล์ออกเป็นนามสกุลและพาธของรูท จากนั้นเพิ่มสตริงหรือตัวเลขตามลำดับไปยังพาธรูท ในตัวอย่างต่อไปนี้ _img จะถูกเพิ่มหลังชื่อไฟล์ทั้งหมด
import os import glob files = glob.glob('./testdir/*') for f in files: ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_img' + fext)
ผลที่ได้คือสิ่งนี้
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
เช่นเดียวกับการเพิ่มสตริง/หมายเลขลำดับก่อนไฟล์ ให้เปลี่ยนคำสั่ง for เมื่อเพิ่มหมายเลขลำดับ
for i, f in enumerate(files): ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_' + '{0:03d}'.format(i) + fext)
. └── testdir ├── a_000.jpg ├── b_001.jpg ├── c_002.jpg ├── d_003.jpg └── e_004.jpg