[python] 個人日常python工具代碼

生成文件目錄結構

生成文件夾或文件的目錄結構,並保存結果。可選是否濾除目錄,特定文件以及可以設定最大查找文件結構深度。效果如下:

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))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章