1. 程式人生 > >Python批處理修改檔案字尾名

Python批處理修改檔案字尾名

需求:為了寫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