python 文件及文件夹批量操作总结

python 文件夹批量操作

删除一级文件夹下文件

for i in os.listdir(path):   ##用于返回指定的文件夹包含的文件或文件夹的名字的列表
    path_file = os.path.join(path,i)    ##连接两个或更多的路径名组件
    if os.path.isfile(path_file):       ##判断是否为文件
        os.remove(path_file)            ##对文件进行删除 
    else:                               ##如果为文件夹继续进行判断
        for f in os.listdir(path_file):  ##二级文件夹下文件无法删除,下叙代码进行改进
            path_file2 =os.path.join(path_file,f)
        if os.path.isfile(path_file2):
            os.remove(path_file2)        

删除一级文件夹和二级文件夹下文件

def  del_file(path):
    for i in os.listdir(path):
         path_file = os.path.join(path,i) 
    if os.path.isfile(path_file):
         os.remove(path_file)
    else:
         del_file(path_file)     ##如果不是文件,对文件夹继续进行del_file函数
 ##执行
  path='E:\垃圾分类\文件夹'
del_file(path)  

删除文件夹里txt文件

def  del_txt(path):   ##定义删除txt文件函数
    for i in os.listdir(path):    
        path_file = os.path.join(path,i)
        file=os.path.splitext(path_file)
        filename,type=file
        if type=='.txt':     ##如果文件后缀为txt,则删除文件
             os.remove(path_file)  
  ##执行
  path1='E:\\垃圾分类\\华为数据\\train_data_v2'
del_txt(path1)

对文件夹中图片重新编号(命名)

import sys
def rename():
    path=input("请输入路径(例如D:\\picture):")
    name=input("请输入开头名:")
    startNumber=input("请输入开始数:")
    fileType=input("请输入后缀名(如 .jpg、.txt等等):")
    count=0
    i=1
    filelist=os.listdir(path)
    for files in filelist:
        Olddir=os.path.join(path,files)
        if os.path.isdir(Olddir):
            continue
        Newdir=os.path.join(path,name+str("%03d" % i)+'-'+str(count+int(startNumber))+fileType)
        os.rename(Olddir,Newdir)
        if count==74:
            count=0
            i=i+1
        else:
            count=count+1
    print("一共修改了"+str((i-1)*78+count)+"个文件")
    rename()

批量创建文件夹


def creDir():
   ## 数字前补0创建文件夹002,003...
    root = 'E:\\picture\\'
    i = 1
    for j in range(196):
        k = 'name'+"%03d" % i   ##左边补零的等宽格式
        file_name = root + str(k)
        os.mkdir(file_name)
        i=i+1
##原文链接:https://blog.csdn.net/u014421797/article/details/83242997

将指定文件放入指定文件夹中

##将指定文件放入指定文件夹中,文件夹与文件在同一路径下,且文件夹名称与文件前缀一致
for folderName, subfolders, filenames in os.walk('E:\\picture'):   ##文件与文件夹在同一路径
   for subfolder in subfolders:
       for filename in filenames:
           if filename[:7] == subfolder[:7]:
               try:
                   shutil.move(folderName + '\\'+ filename, folderName + '\\'+ subfolder)
               except OSError:
                   pass

批量删除指定文件夹

def  del_folder(path):              ##定义删除指定名称文件夹函数
   for i in os.listdir(path):      
       path_folder = os.path.join(path,i)  ##将文件夹名称保存在path_folder中
       root = 'E:\\每人任务夹\\'       
       j = 1
       for l in range(196):               ##编辑想要删除文件夹名称
           k ='E:\\每人任务夹\\name'+"%03d" % j
           j=j+1
           if path_folder==k:            ##判断是否有该文件夹,如果有则删除 
               shutil.rmtree(path_folder)
##执行
path2='E:\\每人任务夹\\'
del_folder(path2)

##代码运行时如果不小心丢了可以用history找回
python可从anaconda prompt中进入操作,比cmd中更方便
直接在anaconda prompt中写入路径,在该路径下进入,具体如下
python 文件及文件夹批量操作总结_第1张图片

12.3记录

(为了与上次记录分开,不记得上面写什么了,重新来)

创建文件夹,名称为data中的名称

读入包与文件

文件data为330个垃圾类别文件夹名称,比如:香蕉皮、塑料袋等

import os
import shutil
import pandas as pd
import numpy as np
data=pd.read_csv('E:\\任务分配\\分类表格.csv',sep=',',names=['name'])  ##names为文件特征命名

定义函数,创建文件夹

def creDir():
    root = 'E:\\任务分配\\合并图片\\图片分类1\\'  ##文件夹创建路径
    i=0
    for j in range(333):
        file_name = root + str(data.name[i])
        os.mkdir(file_name)
        i=i+1

creDir()

将不同文件夹下相同子文件夹中的图片合并

(比如:name1下香蕉皮文件夹与name2下香蕉皮文件夹图片合并,此代码为333类文件夹批量合并,利用文件名作为索引进行寻找)

SOURCE_DIR = r'E:\任务分配\合并图片\图片'
root= 'E:\\任务分配\\合并图片\\图片分类1\\'
##rb = open_workbook('m:\\1.xls')
i=0
for j in range(333):
    COPY_DIR =data.name[i]
    TARGET_DIR=root+str(data.name[i])
    for dir_path, sub_dirs, files in os.walk(SOURCE_DIR, True):
        if os.path.split(dir_path)[-1] == COPY_DIR:
            for file in files:
                shutil.copyfile(os.path.join(dir_path, file), \
                            os.path.join(TARGET_DIR, file))
  ##                          ws = rb.get_sheet(0)
    ##                        ws.write(0,i,)
      ##                      wb.save('m:\\1.xls')
                            
    i=i+1

将不同文件夹下子文件夹名相同的图片合并入同一个文件夹

(在source_dir中寻找与copy_dir文件名相同的,全部复制放入到target_dir中)

##函数编辑
SOURCE_DIR = r'E:\任务分配\合并图片\图片'
TARGET_DIR=r'E:\\任务分配\\合并图片\\图片分类\\零食'
COPY_DIR ='零食'
for dir_path, sub_dirs, files in os.walk(SOURCE_DIR, True):
       if os.path.split(dir_path)[-1] == COPY_DIR:
            for file in files:
                shutil.copyfile(os.path.join(dir_path, file), \
                            os.path.join(TARGET_DIR, file))

##运行
SOURCE_DIR = r'E:\任务分配\合并图片\图片'
dir_path=os.walk(SOURCE_DIR, False)

删除指定路径文件

##读入有争议图片
data1=pd.read_csv('E:\\任务分配\\有争议图片.csv',sep=',',names=['file','name'])
data1.file[1]
 
##删除文件
i=1
for j in range(44):
    root='E:\\任务分配\\合并图片\\图片分类\\'
    file_name=root+str(data1.file[i])+'\\'+str(data1.name[i])+'.jpg';
    os.remove(file_name)
    i=i+1

批量复制文件到指定文件夹

##读入有争议图片
from shutil import copyfile
data2=pd.read_csv('E:\\任务分配\\最终有争议图片##批量复制文件到指定文件夹
##创建特定文件夹
i=1
root='E:\任务分配\最终有争议图片\有争议图片\\'
root1='E:\任务分配\最终有争议图片\\最终有争议'    
##放置有争议图片
for j in range(912):
    file_name=root+str(data2.file[i][0:6])+'\\'+str(data2.file[i])+'.jpg';
    file=root1+'\\'+str(data2.file[i])+'.jpg';
    shutil.copyfile(file_name,file)
    i=i+1csv',sep=',',names=['file','name1','name2','name3'])
data2.file[0]

你可能感兴趣的:(python,python,文件夹,批量)