今天在stack overflow回答了問題:基於檔名稱構建目錄,並移動檔案。
例如:
自動將』abc2018081224.jpg』放入目標目錄下的2018-08資料夾
問題分析:
第一步:找到給定型別的檔案(flag引數控制檔案型別):查詢給定目錄下的所有檔案,匹配目標型別。可以只查詢本目錄下的檔案(os.listdir),也可以遞迴的查詢所有的子資料夾(os.walk);
第二步:匹配檔名稱:構建合適的正規表示式,找的需要的檔案;
第三步:移動檔案:確定是否需要建立目錄、目標目錄中是否已有檔案。
程式設計:
構建movefile類,其中包括findalljpg方法、parse方法、move方法和run方法。將源目錄、目標目錄、recursive引數和flag引數傳遞給類的構造方法,呼叫run方法將flag和parse界定的檔案從源目錄移動到目標目錄。
from __future__ import print_function
import os, re, shutil
# 移動檔案的movefile類
self.srcdir = srcdir # 源目錄
self.dstdir = dstdir # 目標目錄
self.recursive = recursive # 遞迴查詢檔案夾,預設為false,只查詢源目錄下的檔案,不會遞迴查詢其子資料夾
self.flag = flag # 要匹配的檔案型別 '.jpg'-jpg檔案
self.duplicatefilename = # 捕獲重複移動檔案,即目標檔案中已存在此檔案
self.badfilename = # 檔案型別符合要求,但命名不符合要求
self.jpgfile = # 捕獲的jpg檔案
self.srcdirdict = {} # 當遞迴查詢時,記錄檔案的root目錄,在移動時使用
# 找到給定型別(flag)的檔案
# 使用正規表示式匹配
defparse
(self, text):
try:
pat =re.compile('[a-za-z]+([\d]+)')
match = pat.match(text)
data = match.group(1)
filename = data[:4]+'-'+data[4:6]
except:
filename = none
return filename
# 移動
defmove
(self, text):
try:
filename = self.parse(text)
if filename == none: return
ifnot os.path.isdir(os.path.join(self.dstdir, filename)):# 判斷主目錄是否存在子資料夾
os.mkdir(os.path.join(self.dstdir,filename))
srcpath= os.path.join(self.srcdirdict[text], text)
dstdir = os.path.join(self.dstdir, filename)
shutil.move(srcpath, dstdir)
except:
raise
@staticmethod
defdecc
(dir):
return os.path.join(self.srcdir,dir)
# 執行
# 例子: 將srcdir中的符合parse要求的jpg檔案移動到dstdir
srcdir = r'c:\users\administrator\desktop\2'
dstdir = r'c:\users\administrator\desktop\3'
fmv = movefile(srcdir, dstdir, recursive = false)
fmv.run()
可以根據需要,修改程式中的flag和recuesive。 根據輸入檔名確定輸出檔名
這段 和 molpro 對輸入輸出檔名的處理方法相同,對輸入檔案 task.inp 生成輸出檔案 task.out。即,對輸入檔案的檔名去掉檔案型別字尾,預設的輸出檔案型別字尾是 out,這和 molpro 的設定是相同的。另外也保留了去掉檔案型別字尾的檔名字串,以便生成其他的 log 等等檔案之用...
Makefile根據檔名編譯檔案
同級目錄下有多個具有main函式的.c檔案,需要根據檔名來覺得哪乙個.c被編譯。makefile檔案如下 bin test cc gcc cflags dxdebug 自定義的巨集定義 libs incs i.inc 標頭檔案的路徑 srcs 0.c cobjs srcs c o all bin c...
Python 修改檔名,然後移動
import os os.path.join 合併路徑 os.path.expanduser 獲取當前使用者路徑 os.listdir 獲取當前路徑檔名 os.path.split 拆分路徑 檔名 os.path.exists 檢查絕對路徑檔案是否存在 os.rename old,new 修改檔名 ...