編寫pytohn腳本時通常需要批處理。
列出指定目錄下的所有文件/文件夾
os.listdir() 方法用於返回指定的文件夾包含的文件或文件夾的名字的列表,但有個很明顯的缺點,它的默認順序不是有序的或者說不是通常的順序(不知道用啥排的)。
由於返回值是list類型,所以可以使用sort()
import os path = "./Pictures/images/" files = os.listdir(path) for filename in files: print(filename)
結果(可見此時並非有序):
現進行排序,sort是根據字典序排,為了更加准確,應將字符串轉換為數字排序。
import os path = "./Pictures/images/" files = os.listdir(path) #files.sort() files.sort(key = lambda x:int(x[:-4])) for filename in files: print(filename)
處理文件名
1、去除前導零
import os path = "./Pictures/images/" files = os.listdir(path) #files.sort() files.sort(key = lambda x:int(x[:-4])) for filename in files: filename = str(int(filename[:-4])) + ".jpg" print(filename)
2、列出包含指定字符串的文件
import os path = "./Pictures/images/" files = os.listdir(path) files.sort(key = lambda x:int(x[:-4])) for filename in files: if "1" in filename: print(filename)
3、列出以指定字符串開頭或結尾的文件
import os path = "./Pictures/images/" files = os.listdir(path) files.sort(key = lambda x:int(x[:-4])) print("start with \"001\"") for filename in files: if filename.startswith("001"): print(filename) print("end with \"2.jpg\"") for filename in files: if filename.endswith("2.jpg"): print(filename)
完整的程序:
將images中的文件經均值模糊后保存到images_blur,對應的文件名不變。
import os import cv2 import numpy as np def solve(): input_dir = "./Pictures/images/" # 保存截取的圖像目錄 output_dir = "./Pictures/images_blur" # 讀取圖片目錄表 image_list=os.listdir(input_dir) #獲得文件名 image_list.sort() index = 1 for file in image_list: print('正在處理圖像: %s' % index) img_path = input_dir + file print(img_path) img = cv2.imread(img_path) img = cv2.blur(img, (3,3)) cv2.imwrite(output_dir + '/' + file,img) print(output_dir + '/' + file) index += 1 if __name__ == '__main__': solve()
參考鏈接:
1、Python中os.listdir的排序問題 https://www.cnblogs.com/jins-note/p/9550388.html
2、python版的文件批量讀寫和保存等 https://blog.csdn.net/sinat_36458870/article/details/78825571