天天看點

python批處理_如何使用python寫批處理

不會用bat寫批處理,bat指令太複雜,怎麼辦?可以使用python替代bat寫批處理

1. 為什麼需要批處理

我手頭上有一個影像波段融合的控制台小程式Fusion.exe,需要打開cmd,然後需要在cmd中輸入

融合程式路徑 影像寬度w 影像高度h 波段數n 影像1路徑 影像2路徑……影像n路徑 融合後影像路徑

1

如果隻需要波段融合成一副影像,那直接在控制台調用程式并輸入參數即可。但這次需要将236幅每6個波段的影像進行波段融合,手動一次次來的話,我選擇狗帶。 要是把在cmd輸入的參數換成變量就好了,我們可以通過for循環和變量可以達到讓cmd重複執行相似的指令。

2. 使用python進行批處理

我們這裡主要運用了os.system()函數。os子產品中的system()函數可以友善地運作其他程式或者腳本。相當于在Windows的cmd視窗中輸入的指令。 主要需要4個步驟:

1. 導入os子產品

import os

1

2. 輸入要執行的指令

command = 'ipconfig' #要執行的指令(這裡以指令ipconfig為例),相當于直接在windows的cmd視窗中輸入的指令。

1

3. 調用os.system()函數

os.system(command) #調用os.system()函數,參數為上面定義的command.

1

4. for循環1-3 步驟 将代碼儲存為 自定義檔案名.py ,在cmd執行下面指令。

python 自定義檔案名.py #注意:安裝python時,需要設定環境變量

1

3. 一個批處理的例子

下面我将叙述一個例子并附上代碼來詳細說明如何使用python進行批處理

3.1 例子的背景

有一個帶參數的圖像波段融合程式,該程式需要在控制台運作。

有6個檔案夾,分别儲存了236張影像的6個波段。影像檔案的命名方式為TTC0*.raw、TTC1*.raw、TTC2*.raw、TTC3*.raw、TTC4*.raw、TTC5*.raw分别表示1-6波段的影像。

3.2 方法和代碼

思想:使用python周遊檔案儲存為變量,command中使用變量,for循環調用os.system(command)。

周遊第一個檔案夾中*.raw格式檔案,将檔案名清單賦給一個變量。

根據上述變量和.raw格式的命名規則生成其他5個波段影像的檔案通路路徑。

定義command變量

調用os.system(command)

重複執行1-4步驟,for循環。

import os

filepath = ‘D:\\第一波段所在的檔案夾\\0\\20m’ #定義第一波段的路徑

resultpath = ‘D:\\Fusion’ #定義融合後影像存儲路徑

filelist = os.listdir(filepath) #周遊檔案夾所有的檔案

file_raw_list = filter(lambda filename:filename[-4:] == ‘.raw’, filelist) #篩選出格式為.raw的檔案

for i in range(len(file_raw_list)): #循環周遊第一波段檔案夾中raw格式檔案,生成其他波段影像的路徑

fileon0 = file_raw_list[i]

file_path = [] #6波段影像的路徑

#根據命名規則和第一波段檔案名得到6個波段影像的檔案名和路徑,存儲在表file_path中

for i in range(6):

fileonname = fileon0[0:3] + str(i) + fileon0[4:]#各波段影像檔案名,将檔案名中的0替換為0-5

fileonpath = filepath[0:-5] + str(i) + filepath[-4:]#各波段影像檔案夾路徑,将檔案夾中的0替換為0-5

file_path.append(fileonpath+’\\’+fileonname)#生成6個波段影像的通路路徑,例:‘D:\\第一波段所在的檔案夾\\1\\20m\\TTC1*(圖像标号).raw’

#輸入要執行的指令(按照控制台程式的格式輸入參數),相當于直接在windows的cmd視窗中輸入的指令

command = r’D:\控制台程式所在的檔案夾\Fusion.exe’ + ‘ ‘ + file_path[1] + ‘ ‘ + file_path[2] + ‘ ‘ + file_path[3] + ‘ ‘ + file_path[4] + ‘ ‘ \

+ file_path[0] + ‘ ‘ + file_path[5] + ‘ ‘+ resultpath+’\\’+ fileon0[0:-4]+’.tiff’

os.system(command) #最後調用os.system()函數

注意:檔案夾的名字最好不要帶中文。

寫得太啰嗦了,又不在重點上,抛磚引玉。