生成文件目錄結構
生成文件夾或文件的目錄結構,並保存結果。可選是否濾除目錄,特定文件以及可以設定最大查找文件結構深度。效果如下:
root:[z:/]
|--a.py
|--image
| |--cat1.jpg
| |--cat2.jpg
| |--cat3.jpg
| |--cat4.jpg
| |--cat5.jpg
| |--cat6.jpg
|--result
| |--result.jpg
|--save.txt
|--test.py
參考
https://blog.csdn.net/feizai1208917009/article/details/88396501
代碼如下:
import os
import os.path
# 結果保存路徑
txtFilePath="save.txt"
savetxtFile = open(txtFilePath, 'w',encoding='utf-8')
# 文件查找路徑
findFilePath="z:/"
# 是否只顯示目錄
isShowDir = False
# 最大子目錄文件深度
maxDepth = 3
# 需要跳過的文件目錄和文件
skipFile = [".git","doc"]
# 需要跳過的文件類型
#skipFileType = [".txt",".MOV"]
skipFileType=[]
def saveFile(depth,item):
# 保存的內容
saveCotent="| " * depth + "|--" + item
print(saveCotent)
savetxtFile.write( saveCotent)
savetxtFile.write("\n")
def listDir(path, depth):
# 獲得絕對路徑
absPath=os.path.abspath(path)
if depth == 0:
print("root:[" + path + "]")
savetxtFile.write("root:[" + path + "]")
savetxtFile.write("\n")
# 超過最大深度
if depth > maxDepth:
return
# 展開目錄文件
for item in os.listdir(path):
# 跳過指定的文件目錄和文件
if item not in skipFile:
# 跳過指定的後綴文件
if os.path.splitext(item)[1] in skipFileType:
continue
# 獲得項目絕對目錄地址
absItem=os.path.join(absPath,item)
# 是否只顯示目錄
if isShowDir is True:
if os.path.isdir(absItem) is True:
saveFile(depth,item)
else:
saveFile(depth,item)
# 查找子項
if os.path.isdir(absItem):
listDir(absItem, depth +1)
if __name__ == '__main__':
listDir(findFilePath, 0)
savetxtFile.close()
多圖合併
將多圖合併爲一張圖像,並添加圖像對應文字,效果如下:
參考
https://blog.csdn.net/qq_37598011/article/details/101551593
https://cloud.tencent.com/developer/ask/204503
代碼如下:
import os
import numpy as np
from PIL import ImageFont, ImageDraw, Image
# 創建字體文件
# 文字名
def creat_font_img(value):
# 設置空白圖像
img = Image.new('RGB', (TEXTWIDTH, TEXTHEIGHT), "white")
# 設置需要顯示的字體 宋體
fontpath = TEXTFONT
# 32爲字體大小
font = ImageFont.truetype(fontpath, TEXTSIZE)
# 繪圖
img_pil = img
draw = ImageDraw.Draw(img_pil)
# 獲取字體寬度
sum_width = 0
sum_height = 0
# 添加文字
for char in value:
width, height = draw.textsize(char, font)
sum_width += width
sum_height = height
# 繪製文字信息
# 文字居中
draw.text(((img_pil.size[0] - sum_width) / 2, (img_pil.size[1] -
sum_height) / 2 + TEXTOFFSET), value, font=font, fill=(0, 0, 0))
return img_pil
# 創建單個帶標題和圖像的文字
def create_single_img(path):
# 提取圖片
img = Image.open(path)
# 提取圖像名
text = img.filename.split(".")[0]
imgFont = creat_font_img(text)
# 圖像大小重置
img = img.resize((IMGWIDTH, IMGHEIGHT))
# 合併的圖像
mergeImg = Image.new(
"RGB", (IMGWIDTH+IMAGESPACE, IMGHEIGHT+TEXTHEIGHT), "white")
mergeImg.paste(imgFont, (0, 0))
# 貼圖
mergeImg.paste(img, (0, TEXTHEIGHT))
return mergeImg
def create_multi_img(dirpath):
# 轉到工作目錄
os.chdir(dirpath)
mergeImgs = []
for dirname in os.listdir(dirpath):
if dirname.split(".")[-1] == 'jpg':
# print(dirname)
mergeImgs.append(create_single_img(dirname))
if ROW*COL is not len(mergeImgs):
print("錯誤,請檢查圖像數量")
# 單個圖像尺寸
mergeW, mergeH = mergeImgs[0].size
finalImg = Image.new("RGB", (mergeW*COL, mergeH*ROW), "white")
# 第幾張圖
num = 0
# 排列圖像
for top in range(0, mergeH*ROW, mergeH):
for left in range(0, mergeW*COL, mergeW):
#print(left, top)
finalImg.paste(mergeImgs[num], (left, top))
num = num+1
return finalImg
# -----------------
# 全局變量
# 圖片排列方式
ROW = 3
COL = 2
# 單個圖像大小
IMGWIDTH, IMGHEIGHT = 600, 600
# 圖像間距
IMAGESPACE = 10
# 文字圖像尺寸 文字圖像寬需要與單張輸入圖像等寬
TEXTWIDTH, TEXTHEIGHT = IMGWIDTH, 100
# 文字大小和文字上下偏移量
TEXTSIZE, TEXTOFFSET = 64, 5
# 文字字體名
# simsun宋體, msyh.ttc微軟雅黑
TEXTFONT = "font/msyh.ttc"
if __name__ == '__main__':
finalImg = create_multi_img("./")
# 保存圖像
finalImg.save("result.jpg", dpi=(300.0, 300.0))