- Μαζική μετονομασία με χρήση της μονάδας os και της μονάδας glob.
- Λήψη της λίστας αρχείων με την ενότητα glob
- Μετονομασία με os.rename()
- Δημιουργία μηδενικών διαδοχικών αριθμών με str.format()
- Παράδειγμα κώδικα για την προσθήκη ενός string\διαδοχικού αριθμού πριν από ένα αρχείο
- Παράδειγμα κώδικα για την προσθήκη ενός string\διαδοχικού αριθμού μετά από ένα αρχείο
Μαζική μετονομασία με χρήση της μονάδας os και της μονάδας glob.
Χρησιμοποιήστε την ενότητα os και την ενότητα 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,*kwargs)
Εκτελεί λειτουργίες μορφοποίησης συμβολοσειρών. Η συμβολοσειρά που καλεί αυτή τη μέθοδο μπορεί να περιέχει κανονικούς χαρακτήρες ή πεδία αντικατάστασης που χωρίζονται με {}.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
Παράδειγμα κώδικα για την προσθήκη ενός string\διαδοχικού αριθμού πριν από ένα αρχείο
Πρώτον, λάβετε το όνομα του αρχείου με την 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, ορίστε το δεύτερο όρισμα του enumerate σε 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
Παράδειγμα κώδικα για την προσθήκη ενός string\διαδοχικού αριθμού μετά από ένα αρχείο
Χρησιμοποιήστε την 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
Όπως και με την προσθήκη ενός string\διαδοχικού αριθμού πριν από ένα αρχείο, αλλάξτε την εντολή 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