使用python脚本循环文件夹该文件名生成新文件
- 循环读取文件夹
- 创建文件目录
- 读取文件夹
- 修改文件
- 修改文件名
- 文件生成
- 生成一个新的文件,并在里面写入内容
循环读取文件夹
我们并不知道文件夹内的目录结构,然后我们需要用代码来读出来里面的目录结构然后再进行处理。
创建文件目录
我们创建了一个文件和子文件夹混合的,并且文件类型也是不定的,然后用代码进行读取。
读取文件夹
其中最主要的是代码循环读取文件夹。
我们可以看到代码读取了文件夹内所有的子文件夹和文件。代码如下:
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行文件路径截取后面该为自己想改的类型即可)
这里代码都很简单,只不过有一点点逻辑性。主要就是一个递归函数。
文件生成
生成一个新的文件,并在里面写入内容
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)
上面比较重要地方的都写了注释。可以耐心看一下很容易理解的。
接下来看一下文件创建的结果。
初始路径给的G://test, 然后他就生成在此路径下。接下来我们看一下内容。
和预期的也是一致的。
# w : 创建文件(w为写入的操作,当文件不存在时,则会创建文件;已创建文件,则内容会被覆盖)
# w+ : 创建文件并读取文件
# wb : 二进制形式创建文件(与 w 的功能相同,只不过 web 的写入类型为 byte )
# wb+ : 二进制形式创建或追加内容(如果文件存在不会覆盖原本的内容,而是以 byte 类型进行追加)
# a : 在文件中追加内容,如果没有该文件则会创建文件
# a+ : 读写模式追加(同样是追加内容,只不过赋予了读取的功能)
# ab+ : 二进制形式读写追加(可以追加并读取 byte 类型的模式)