将文件名首字母大写,但保持扩展名为小写
我写了一个脚本,可以把当前文件夹里的所有文件名都改成统一的格式,除了那些我设定要跳过的文件。之所以写这个脚本,是因为有时候下载的文件名格式各不相同。有的人用".,-_"这些符号,或者把字母都大写,反正看起来很乱,也不方便处理。所以我做了这个脚本,让所有文件名都变得整齐一致。
import os,sys,re,time
start=time.time()
skip2=['.py']
skip3=['.Jpg','.jpg']
count=0
lijst=os.listdir()
r = re.compile(r'[-_ ]+')
def solve(s):
name, ext = os.path.splitext(s)
artist, song = name.rsplit('-', 1)
artist = r.sub(' ', artist).title().strip()
song = r.sub(' ', song).title().strip()
ext = ext.lower()
return artist + ' - ' + song + ext
for x in lijst:
if x[-3:] not in skip2 and x[-4:] not in skip3:
y=x
if __name__ == '__main__':
x=solve(x)
x=re.sub('Ft' ,'Ft.' ,x)
x=re.sub('Feat' ,'Feat.' ,x)
x=re.sub('Extended Mix' ,'(Extended Mix)' ,x)
x=re.sub('Original Mix' ,'(Original Mix)' ,x)
x=x.replace('(((' ,'(')
x=x.replace('((' ,'(')
x=x.replace(')))' ,')')
x=x.replace('))' ,')')
x=re.sub("\.\.",".", x)
x=re.sub(' 'or' ' ,' ' ,x)
print(x)
os.rename (y,x)
count=count+1
print("%s Files edited."%count)
print('It took', time.time()-start, 'seconds.')
input("Press enter to exit...")
非常感谢 Ashwini Chaudhary 的帮助,我解决了我的问题,并把这个脚本放在这里,方便其他人使用。
1 个回答
0
你可以使用 os.path.splitext
这个工具,先把文件名和文件后缀分开,然后对文件名进行一些处理,最后再把它们合并回去:
import os
import re
r = re.compile(r'[-_ ]+')
def solve(s):
name, ext = os.path.splitext(s)
artist, song = name.rsplit('-', 1)
artist = r.sub(' ', artist).title().strip()
song = r.sub(' ', song).title().strip()
return artist + ' - ' + song + ext
if __name__ == '__main__':
print solve("Alibi- Eternity_ Ft_ Armin Van Buuren and Dj Tiesto_.mp3")
print solve( "05-orjan_nilsen-so_long_radio__original_mix.mp3")
print solve( "05 - Orjan Nilsen - So Long Radio (Original Mix).mp3")
输出结果:
Alibi - Eternity Ft Armin Van Buuren And Dj Tiesto.mp3
05 Orjan Nilsen - So Long Radio Original Mix.mp3
05 Orjan Nilsen - So Long Radio (Original Mix).mp3