当前位置:   article > 正文

用Python分割文件夹_文件夹拆分

文件夹拆分

当一个文件夹下面有很多小文件时,会导致打开文件夹的速度变慢,这时需要新建一些子文件夹,将小文件重新归类。

1. os.listdir 和 filter

在python中,通过os.listdir读取文件夹下的文件名,如果我们只希望对某种特别的文件类型进行重新归类,则可以通过filter来筛选读取到的文件。

filter的语法规则为

filter(function, iterable)
  • 1

其功能类似于

def filter(function,iterable):
    newList = []
    for i in iterable:
        if function(i):
            newList.append(i)
    return newList
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

所以,对于一个文件名而言,我们可以通过判定其末位的扩展名,来实现对特定文件的筛选。但需要注意的是,filter返回的并不是list,我们可以将其转换成list,从而方便后续的处理。

# 建立一个筛选规则
formFilter = lambda form :\
    lambda f : True if f[-len(form):] == form else False

# 输入文件夹,返回文件夹下所有dType类型数据
getAllFiles = lambda path,dType : \
    list(filter(formFilter(dType),os.listdir(path))) #筛选文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2. 新建文件夹与剪切文件

在python中,可通过os.mkdir来新建一个文件夹,通过os.path.exists来判定某个文件夹是否存在。所以,当我们希望将某个文件存储到某个文件夹中的时候,可以先进行判定。

# 新建文件夹
def mkDir(path):
    if not os.path.exists(path):
        os.mkdir(path)mkDir 
  • 1
  • 2
  • 3
  • 4

在Python中,os.rename是对文件重新命名的函数,然而在windows中,会自动将\识别为文件夹的层级关系。所以,如果我们希望将名为"test.txt"的文件移动到名为"folder"的文件夹中,则只需要将其文件名改为"folder\test.txt"即可,但前提是文件及"folder"必须存在。

其调用格式为

os.rename(src,dst)
  • 1

其中,src为源文件,dst为目标文件。

3. 实现

我们希望将文件夹中名为a-b.txt的文件重新命名为b.txt,并存储在文件夹a中。

import os
# 文件夹筛选器
formFilter = lambda form :\
    lambda f : True if f[-len(form):] == form else False

# 只对文件名称中有mark的进行操作
markFilter = lambda mark:\
    lambda f : True if mark in f else False

# 输入文件夹,返回文件夹下所有dType类型数据
getAllFiles = lambda path,dType : \
    list(filter(formFilter(dType),os.listdir(path))) #筛选文件

# 新建文件夹
def mkDir(path):
    if not os.path.exists(path):
        os.mkdir(path)

def splitFolder(path=r'E:\Downloads\Cloud\Jtxt',mark="-"):
    if path[-1]!='\\':
        path += "\\"
    files = getAllFiles(path,"txt")
    files = list(filter(markFilter(mark),files))
    for f in files:
        try:
            folder = f.split(mark)[0]
            newName = f[len(folder)+1:]
            mkDir(path+folder)
            os.rename(path+f,path+folder+'\\'+newName)
        except:
            print(f)

if __name__ == "__main__":
    splitFolder()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/625908
推荐阅读
相关标签
  

闽ICP备14008679号