• 3

批次大量移動不同檔案的方法?

ren1244 wrote:
這個是把所有子資料夾...(恕刪)


大大你這個版本好神!

裡面不管有多少層結構,即使每層都有檔案也可以通通拉到第一層子資料夾
像是手機裡的照片拉到電腦他都有多層資料夾的問題也可以順便解決!

請問遇到重複檔案會自動消失停止無法再執行的問題有辦法可以解決得到嗎?
因為他也不會提示那個是重複檔案之類
只會自己消失然後無法繼續執行
如果檔案太多很難去找重複檔案的那一個

我昨晚是用Everything在父資料夾搜索.srt
掃出所有.srt檔案後就像在一個圖書館裡面有幾千本書
要找出裡面那幾本是重複一樣困難
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))
ren1244 wrote:
import osimport...(恕刪)

大大這個很完美!!
YOU SAVED MY LIFE!!
感激!!

請問如果想學習相關知識可以從那裡入手?

另外也感謝其他有回覆有幫忙的大大們
ren1244

搜尋「python 教學」找自己看得下去的吧,因為我一開始是從別的語言開始學的,所以對 python 入門教材不熟。

2022-12-03 17:42
ggyy020406
ggyy020406 樓主

好的 再次感謝!

2022-12-03 20:01
  • 3
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?