使用python脚本循环文件夹该文件名生成新文件

  • 循环读取文件夹
  • 创建文件目录
  • 读取文件夹
  • 修改文件
  • 修改文件名
  • 文件生成
  • 生成一个新的文件,并在里面写入内容


循环读取文件夹

我们并不知道文件夹内的目录结构,然后我们需要用代码来读出来里面的目录结构然后再进行处理。

创建文件目录

我们创建了一个文件和子文件夹混合的,并且文件类型也是不定的,然后用代码进行读取。

python文件加入批处理 python批处理文件编写_开发语言


python文件加入批处理 python批处理文件编写_python文件加入批处理_02

读取文件夹

其中最主要的是代码循环读取文件夹。

python文件加入批处理 python批处理文件编写_文件名_03


我们可以看到代码读取了文件夹内所有的子文件夹和文件。代码如下:

import os


dirList = []
exist = []

def readfile(path):
    # print(path)
    filelist = os.listdir(path)
    for item in filelist:
        # print(item)
        itemPath = path +"\\"+ item
        # print(itemPath)
        if os.path.isdir(itemPath):
            #print(itemPath)
            readfile(itemPath)
            dirList.append(itemPath)
        else:
            if path in exist:
                continue
            else:             
                exist.append(itemPath)
                # print(item)
    
path = "D://桌面//test"
readfile(path)
print("文件夹为:")
print(dirList)
print("文件为:")
print(exist)

注:如果需要的话可以用split()方法进行path路径的截取,后面也会介绍。

修改文件

上一步的基础上,进行文件名的修改

修改文件名

我们可以定一下,修改文件名字为指定的名字,修改为文件名字加 _test ,现在我们来看代码。

import os


dirList = []
exist = []

def readfile(path):
    # path为根路径
    filelist = os.listdir(path)
    for item in filelist:
        # print(item)
        itemPath = path +"\\"+ item
        # print(itemPath)
        if os.path.isdir(itemPath):
            #print(itemPath)
            readfile(itemPath)
            dirList.append(itemPath)
        else:
            if path in exist:
                continue
            else:             
                exist.append(itemPath)
                # print(item)
                changeName(path,item.split('.')[0])

def changeName(path,name):
    filelist = os.listdir(path)  
    test = "_test" 
    for item in filelist:
        orifile = path + "\\" + item
        if os.path.isdir(orifile):
            continue
        else:
            newfile = path + "\\" + name + test +"."+ item.split('.')[1]
            os.rename(orifile,newfile)
    
path = "D://桌面//test"
readfile(path)
print("文件夹为:")
print(dirList)
print("文件为:")
print(exist)

我们可以看到文件已经改了,即使文件夹里面的文件也更改了。(此外还可以改文件类型,大概34行文件路径截取后面该为自己想改的类型即可)

python文件加入批处理 python批处理文件编写_python_04


这里代码都很简单,只不过有一点点逻辑性。主要就是一个递归函数。

文件生成

生成一个新的文件,并在里面写入内容

import os
import json

dirList = []
exist = []
file_list =[]

def readfile(path):
    # path为根路径
    filelist = os.listdir(path)
    for item in filelist:
        # print(item)
        itemPath = path +"\\"+ item
        # print(itemPath)
        if os.path.isdir(itemPath):
            #print(itemPath)
            readfile(itemPath)
            dirList.append(itemPath)
        else:
            if path in exist:
                continue
            else:             
                exist.append(itemPath)
                # print(item)
                changeName(path,item.split('.')[0])

def changeName(path,name):
    filelist = os.listdir(path)  
    test = "_test" 
    for item in filelist:
        orifile = path + "\\" + item
        if os.path.isdir(orifile):
            continue
        else:
            newfile = path + "\\" + name + test +"."+ item.split('.')[1]
            # 路径截取,以点进行分割出来两个元素,一个点前面(文件名字),一个点后面(文件类型)
            file_list.append(newfile)
            os.rename(orifile,newfile)
    
    
def createfile(path):
    # path:文件会生成在此路径下这里默认为开始给的路径
    file_paths = os.path.join(path, 'create.json')
    # create.json:create为文件名,后面是文件类型
    file_lists ={
    "file folder path" : dirList,
    "file path" :   exist 
    }
   
    file_create = open(file_paths, 'w')
    # 文件创建
    file_create.writelines(json.dumps(file_lists))
    # 写入内容,json.dumps:json反序列化
    file_create.close()
    # 资源关闭
path = "G://test"
readfile(path)
createfile(path)

上面比较重要地方的都写了注释。可以耐心看一下很容易理解的。

接下来看一下文件创建的结果。

python文件加入批处理 python批处理文件编写_文件名_05


初始路径给的G://test, 然后他就生成在此路径下。接下来我们看一下内容。

python文件加入批处理 python批处理文件编写_文件名_06


和预期的也是一致的。

#   w :  创建文件(w为写入的操作,当文件不存在时,则会创建文件;已创建文件,则内容会被覆盖)
#  w+ :  创建文件并读取文件
#  wb :  二进制形式创建文件(与 w 的功能相同,只不过 web 的写入类型为 byte )
# wb+ : 二进制形式创建或追加内容(如果文件存在不会覆盖原本的内容,而是以 byte 类型进行追加)
#   a : 在文件中追加内容,如果没有该文件则会创建文件
#  a+ :  读写模式追加(同样是追加内容,只不过赋予了读取的功能)
# ab+ : 二进制形式读写追加(可以追加并读取 byte 类型的模式)