import os
import logging
# 從這層目錄開始扁平化(py 檔所在資料夾為 0,下層資料夾為 1)
startDepth = 1
# 是否自動移除空資料夾
autoRemove = True
# 偵測此 py 檔所在資料夾
baseDir = os.path.dirname(__file__)
# 以下兩個變數作為堆疊
nameStack = [baseDir]
iteratorStack = [os.scandir(baseDir)]
# 紀錄器
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# 螢幕顯示
handler1 = logging.StreamHandler()
handler1.setLevel(logging.DEBUG)
logger.addHandler(handler1)
# 檔案紀錄
handler2 = logging.FileHandler('repeat.txt', 'w', encoding = 'UTF-8')
handler2.setLevel(logging.WARNING)
logger.addHandler(handler2)
while iteratorStack:
it = iteratorStack[-1]
entry = next(it, None)
if entry is None:
dirname = nameStack.pop()
iteratorStack.pop()
it.close()
if autoRemove and len(os.listdir(dirname)) == 0:
os.rmdir(dirname)
else:
filename = os.path.join(nameStack[-1], entry.name)
if entry.is_dir():
nameStack.append(filename)
iteratorStack.append(os.scandir(filename))
elif len(iteratorStack) > startDepth + 1 and entry.is_file():
dist = os.path.join(nameStack[startDepth], entry.name)
if os.path.exists(dist):
logger.warning("因重複檔名無法移動: {}".format(filename))
else:
os.rename(filename, dist)
logger.info("移動 {} 到 {}".format(filename, dist))