Python批處理修改檔案字尾名
阿新 • • 發佈:2019-02-07
需求:為了寫OJ自動掛題 在這樣的情況下:
1.OJ掛題的需求要求所有的樣例檔案必須要以.in .out形式出現 (原本的資料形式是.txt)
2.並且要把所有的樣例都壓縮到一個壓縮包裡
3.既然支援一件處理檔案 那麼也要處理子目錄下的檔案
更新1:還要過濾掉input2(1).txt這樣傻逼的形式
from selenium import webdriver import json import os import re import zipfile def change(url): files = os.listdir(url)#列出當前目錄下所有的檔案 # azip = zipfile.ZipFile('samples.zip', 'w') newname = '' flag = 0 for file in files: portion = os.path.splitext(file)#分離檔名字和字尾 if portion[1] == '': newPath = url + '\\' + portion[0] change(newPath) elif portion[1] ==".txt": flag = 1 #存在txt檔案才壓縮 if portion[0].startswith('input'): temp = str(portion[0]) pos = temp.find('(')#過濾('(') if pos == -1: pos = temp.find('(')#過濾('(') if pos >= 0: temp = temp[0:pos] newname = str(re.sub("\D", "", temp))+".in"#更改字尾名 elif portion[0].startswith('output'): temp = str(portion[0]) pos = temp.find('(') if pos == -1: pos = temp.find('(') if pos >= 0: temp = temp[0:pos] newname = str(re.sub("\D", "", temp))+".out" os.chdir(url) os.rename(file, newname) if flag:#為了避免當前是一個資料夾 也要壓縮 condense(url) def condense(url): azip = zipfile.ZipFile('samples.zip', 'w') for current_path, subfolders, filesname in os.walk(url): print(current_path, subfolders, filesname) for file in filesname: # 將當前路徑與當前路徑下的檔名組合,就是當前檔案的絕對路徑 if file.endswith('in') or file.endswith('out'): azip.write(os.path.join('', file)) azip.close() def batchProcess(): url = 'D:\safemon\Exercise\星際交流' change(url) batchProcess() #批處理 修改所有的檔案字尾名 支援子(子*)目錄
這裡貼參考了別人的部落格:(也是我覺得寫的很好的)
還陸陸續續的參考了很多正則表示式,字串控制,絕對路徑相對路徑的用法
真的:人要不是懶 也不至於搞出這麼多便捷的東西。
人生苦短 我用python