python根據檔名移動檔案到相應的路徑

2021-08-22 15:20:13 字數 3066 閱讀 5673

今天在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 修改檔名 ...