two interfaces to the OS are used :
1, list all the files in the folder (also contains the directory)
Os.listdir (PATH)
Return a list containing the names of the "entries in" directory given by Path. The list is in arbitrary order. It does not include the special entries '. ' and ' ... ' even if they are in the directory.
Availability:unix, Windows.
Changed in version 2.3:on Windows nt/2k/xp and Unix, if path was a Unicode object, the result would be a list of Unicode OB Jects. Undecodable filenames'll still be returned as String objects
2, rename the file
Os.rename (SRC, DST)
Rename the file or directory src to DST. If DST is a directory, OSError'll be raised. On Unix, if DST exists and is a file, it would be replaced silently if the user has permission. The operation may fail on some Unix flavors if SRC and DST are on different filesystems. If successful, the renaming would be a atomic operation (this is a POSIX requirement). On Windows, if DST already exists, OSError would be raised even if it is a file; There may is no way to implement a atomic rename when DST names a existing file.
Availability:unix, Windows
The code is as follows |
Copy Code |
Import OS
Dirpath= "D:/workbench/crazyant.net/myfiles" For fname in Os.listdir (Dirpath): Newfname=fname[3:] Newfpath= "%s/%s"% (dirpath,newfname) Oldfpath= "%s/%s"% (dirpath,fname)
Os.rename (Oldfpath, Newfpath) |
In fact, using Os.listdir to read all the files inside, and then use Os.rename file Rename can be achieved
3, for the above method I also found some ways
The
code is as follows |
copy code |
# coding=utf-8 Import OS Import re Path = "D:\temp" Pattern = Re.compile (' d{3} ') for file in Os.listdir (path): if Os.path.isfile (OS. Path.join (path, file)): match = pattern.search (file) assert match name = Match.group () + '. mp3 ' #print file, name Os.rename (os.path.join (path, file), Os.path.join (path, name)) |
Pay attention to the difference between match and search: Match is to start from scratch, search is greed. Well, it's not that complicated. There's a thing called bulk Rename utility to rename.
Add one more
Enter the specified directory in which the program processes the directory and its subdirectories that contain big.jpg files.
Rename the file named ' Big (5). jpg ' to ' big_5.jpg ',
That is big (N). jpg ==> big_n.jpg
The code is as follows:
# coding:cp936
"""
File renaming
Enter the specified directory in which the program processes the directory and its subdirectories that contain big.jpg files.
Rename the file named ' Big (5). jpg ' to ' big_5.jpg ',
That is big (N). jpg ==> big_n.jpg
@author Chenwei
@date 2010-12-26
"""
Import Glob
Import OS
def main ():
Print ' Rename task start '
Base_dir = raw_input (' Please enter the directory to be processed: ')
# Working with top-level catalogs
Rename_dir (Base_dir)
# Find subdirectories that contain big.jpg files
Pattern = Base_dir + R ' \*\big.jpg '
File_list = Glob.glob (pattern)
# Processing each directory separately
For file in File_list:
i = file.rindex (' \ \ ')
dir = file[:i]
Rename_dir (dir)
print ' Rename task complete '
Raw_input (' Enter arbitrary content end ')
def rename_dir (dir):
# Find the file to be renamed according to the pattern
pattern = dir + R ' \big (*). jpg '
File_list = Glob.glob (pattern)
# processing each file separately
For file in File_list:
Rename_file (file)
def rename_file (fname):
# get filename, remove path and extension
i = fname.rindex (' \ \ ')
j = Fname.rindex ('. ')
basename = Fname[i+1:j]
# Get File Number
k = Basename.rindex (' (')
L = Basename.rindex (') ')
Seq = basename[k+1:l]
# New file name
New_fname = Fname.replace (Fname[i+1:j], ' Big_ ' +seq)
# renaming
Try
Os.rename (fname, New_fname)
print ' rename ' + fname + ' to ' + new_fname + ' success '
Except
print ' rename ' + fname + ' to ' + new_fname + ' fail '
if __name__ = = ' __main__ ':
Main ()