Python脚本从文件名创建文件夹

时间:2018-08-10 09:56:48

标签: python python-2.7

搜索将文件移动到根据文件名创建的方向的python脚本。

例如。
文件名是ARC20180810185310.jpg
将该文件移至:
2018>08


文件名为ARC20180910185310.jpg
将该文件移至:
2018>09

3 个答案:

答案 0 :(得分:0)

首先尝试自己尝试一些事情是件好事,这样一来,您就会学到更多东西。

我会尝试:

import os
from shutil import copyfile
folder_path = '*folder path*'
os.chdir(folder_path)
for file in os.listdir(folder_path)
    year = file[3:7]
    month = file[7:9]
    final_path = folder_path + '/' + year + '>' + month + '/' + file + .jpg'
    copyfile(file, final_path)

只需将**中的路径替换为所需的内容即可。

通过这种方式,您可以对文件名进行切片并从中获取年份和月份(字符从3到6和7,8),然后将文件复制到包含切片的年份和月份的路径。

答案 1 :(得分:0)

首先,您需要glob.glob()函数来查找给定目录中的所有文件:

files = glob.glob('ARC*.jpg')

然后,您需要提取文件名的某些部分:

year = filename[3:7]
month = filename[7:9]

os.makedirs()与exist_ok = True一起使用并创建目录:

os.makedirs(os.path.join(BASE_DIR, year, month))

然后使用shutil.move将文件移动到特定目录

shutil.move(filename, os.path.join(BASE_DIR, year, month, filename))

最后,您将得到如下内容:

import glob
import os.path
import shutil

BASE_DIR = os.path.dirname(os.path.abspath(__file__))

files = glob.glob('ARC*.jpg')
for filename in files:
    year = filename[3:7]
    month = filename[7:9]
    try:
        os.makedirs(os.path.join(BASE_DIR, year, month))
    except OSError:
        pass
    shutil.move(filename, os.path.join(BASE_DIR, year, month, filename))

答案 2 :(得分:0)

只需替换srcDir和dstDir,您就可以移动file.jpg,如果使用MoveFile(srcDir,dstDir,resuisive = True),您也可以将file.jpg移到srcDir的子目录中。

from __future__ import print_function
import os, re, shutil

class MoveFile(object):
    def __init__(self, srcDir, dstDir, recursive=False, flag='.JPG'):
        self.srcDir = srcDir
        self.dstDir = dstDir
        self.recursive = recursive
        self.flag = flag
        self.duplicateFileName = []
        self.badFileName = []
        self.jpgFile = []
        self.srcDirDict = {}

    def findAllJPG(self):
        # recursively find file 
        if self.recursive == False:        
            for item in os.listdir(self.srcDir):
                if os.path.isfile(os.path.join(self.srcDir,item)) and \
                                os.path.splitext(item)[-1] == self.flag.lower():
                    self.jpgFile.append(item)
        else:
            for root, dirs, files in os.walk(self.srcDir):
                for item in files:
                    if os.path.splitext(item)[-1] == self.flag.lower():
                        self.jpgFile.append(item)
                        self.srcDirDict[item] = root

        if not self.jpgFile: 
            print('NOT FIND ANY JPG FILE!')
        return self.jpgFile

    def parse(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 TypeError:
            self.badFileName.append(text)
            fileName = None
        return fileName  

    def move(self, text):
        try:
            fileName = self.parse(text)
            if fileName == None: return
            if not 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:
            self.duplicateFileName.append(text)
            raise

    @staticmethod
    def decC(dir):
        return os.path.join(self.srcDir,dir)

    def run(self):
        try:
            if not os.path.isdir(self.dstDir):
                os.mkdir(self.dstDir)
            for text in self.findAllJPG():
                self.move(text)
            print('MOVE SUCCESSFUL!') 
        except:
            raise

srcDir = r'C:\Users\Administrator\Desktop\2'
dstDir = r'C:\Users\Administrator\Desktop\3'
fmv = MoveFile(srcDir, dstDir, recursive = False)

fmv.run()