python 批量文件处理

177 阅读5分钟

批量创建文件

python 实现批量创建文件

如果我想批量生成文件需要怎么操作

import os  
  
## 假设我要新建10个 txt文件,使用for循环创建  
for i in range(10):  
    ##这里的d:\\py_newfile/,指的是文件的路径,也可以使用./ 代表当前文件夹,%i表示文件的名称,a表示没有该文件就新建  
    f=open('D:\\py_newfile/%s'%i+'.html',"a")   #.html 表示的是生成的文件格式
    f.write("")         # """写入文件,空"""  
    f.close()          #执行完结束

image.png

批量创建文件夹

使用python的os模块
1.os.path.exists(path):判断文件是否存在
2. os.makedirs(path+dirname):创建文件夹 路径+名称
接下来我们批量创建10个文件夹

import os #导入模块  
path = 'D:\\dir/' #设置创建后文件夹存放的位置  
for i in range(10):  
    #定义一个变量判断文件是否存在 ,path 指代路径,str(i)指代文件夹的名字  
    isExists= os.path.exists(path+str(i))  
    if not isExists:          #判断如果文件不存在,则创建  
        os.makedirs(path+str(i))  
        print("%s 目录创建成功"%i)  
    else:  
        print("%s 目录已经存在"%i)  
        continue          #如果文件不存在,则继续上述操作,直到循环结束

image.png 已经在对应的D:\dir/目录下生成了文件夹 image.png

批量修改文件名称

使用python 的 os 模块

  1. os.listdir(dir): 获取指定目录下的文件名称
  2. os.rename(oldfile,newfile): 修改文件名字
  3. re.findall(): 这里需要用到正则表达式 匹配需要的关键字
  4. os.path.isdir(path) : 判断该文件是否文件夹
import os  
import re #导入模块  
path ='D:\\11/' #获取需要处理的指定路径  
dirs=os.listdir(path) #获取当前路径下的所有文件  
c=0                                      #我通过计数重新给他按顺序命名
for i in dirs: #遍历当前路径下的文件  
    c +=1  
    if os.path.isdir(i):    #判断文件类型,如果是文件夹,就pass跳过
        pass  
    else:  
        fname=re.findall('(.*)\.',i)  
        print(type(fname))  
        ftype =re.findall('(\..*)',i)  
        # newI 和type 分别获取当前路径下文件的文件名和文件格式  
  
        newname=(" ").join(fname)       #将list格式的文件名转换为字符串类型
        newtype=(" ").join(ftype)       #将list格式的文件类型转换为字符串类型
        print(type(newname))  
        print(newname,'\n',newtype)   #测试输出文件的文件名和文件类型
        
        # *re.findall* 获取出来的文件是列表,若列表在路径中国,修改文件名时候会报错  
        # 所以这里用join函数将他们转换为字符串  

        oldname =path +i      # 原来的文件名称(路径+文件名)  
        newname = path +newname +newtype    #(路径+(新名称)+文件个数)  在这个修改要重新命名的规则
        try:                 #如果存在异常则跳过,输出错误
            os.rename(oldname,newname) #os模块的rename 函数 修改名字(旧名字,新名字)  
        except:  
            print("文件名重复,请重新输入") 
print("%s======>>>>%s"%(oldname,newname))

针对文件进行批量创建文件夹并将文件移动至所生成的文件夹下,进行重命名操作

  1. 需要使用文件包 os 判断文件是否存在,读取文件列表
  2. 需要使用文件包 re 对文件进行读操作,进行文件的重命名
  3. 需要使用文件包shutil 对文件进行复制,移动操作
    用法:shutil.copy(source,destination,*,follow_symlinks=Ture)

参数:

source:代表源文件路径的字符串——需要修改的文件路径
destination:代表目标文件或目录路径的字符串——修改后的的路径包括文件名
follow_symlink(可选): 此参数的默认值为True,如果为False,并且source表示符号链接,则目标将创建为符合链接。
Note:参数列表中的 “*” 表示以下所有参数(此处为“follow_symlinks”)仅是关键字参数,可以使用其名称(而不是位置参数)来提供
返回类型:此方法返回一个表示新创建文件路径的字符串。

import os  
import re  
import shutil  
path = 'D:\\befor/' #指定需要处理文件的路径  
path_save= "D:\\afterdir/" #指定存放路径  
dirs=os.listdir(path) #获取当前路径下的所有文件  
  
def file_rename(path,filename): ##文件重命名函数  
    # print(path) #打印文件路径  
    file_list=os.listdir(path) #获取当前路径下所有文件  
    # print(file_list)  
    for i in file_list:  
        if os.path.isdir(i):  
            pass  
        else:  
            old_filename=re.findall('(.*)\.',i) #获取文件名  
            file_type=re.findall("(\..*)",i) #获取文件类型  
  
            old_filename=(" ").join(old_filename) #使用join函数将列表转换为字符串  
            new_type = (" ").join(file_type)  #使用join函数将列表转换为字符串
  
            old_filepath=path+'/'+old_filename+new_type  
            new_filename = path + "/1" + new_type #设置新文件名为1.文件类型  
            os.rename(old_filepath,new_filename) #对文件进行重命名  
  
            """# print('新的文件名包括路径:'.format(new_filename))  
            # print(new_filename)  
            # print('old_filename:{} file_type:{}'.format(old_filename,new_type))  
            # print('old_filename:'+ old_filename) """"  
for i in dirs: #遍历当前路径下的文件  
    if os.path.isdir(i):  
        pass  
    else:  
        fname=re.findall('(.*)\.',i)  
        type1 =re.findall('(\..*)',i)  
        # newI 和type 分别获取当前路径下文件的文件名和文件格式  
        fname=(" ").join(fname)  
        type1=(" ").join(type1)  
        #将取出的列表 转换为字符串的形式  

        from_path=path+fname+type1  
        newfilename=path_save+"1"+type1 #新的文件名  
        isExists = os.path.exists(path_save + fname) #判断保存路径下是否存在要创建的文件夹  
        if type1 =='.jpg':  #指定需要修改的类型的文件
            if not isExists: # 判断如果文件不存在,则创建  
                os.makedirs(path_save + fname)  
                print("%s 目录创建成功" %fname)  
                shutil.copy(from_path,path_save+fname) #对应将需要创建文件夹的文件,复制到所生成的目录下  
                try:  
                    file_rename(path_save+fname,fname) #调用重命名函数,对移动过去的文件进行重命名  
                    print("文件移动后重命名成功")  
                except:  
                    print("文件移动后重命名=========>失败")  
                    pass  
            else:  
                print("%s 目录已经存在-------------------------------------" %i)  
                continue # 如果文件不存在,则继续上述操作,直到循环结束