阿诺无发可挠 2022-05-21 17:36 采纳率: 0%
浏览 25

python写一个能批量修改文件夹名称的小工具

问题遇到的现象和发生背景

通过Excel的信息,对文件夹的名称进行修改,在每个文件夹后面都加上他对应的编码
这是未修改之前的文件夹名称,现在我要识别到每个文件夹下面第一个“-”到第二个“-”之间的序列号,并且把他和Excel表格里面的序列号进行匹对,然后把对应的编码加到文件夹名称后面去

img

这是给到的Excel

img

文件夹修改成功后文件名称应为:

img

但是我现在只能修改第一个文件夹的名称,想了好久应该是for循环出错了,但是找不到解决方法,麻烦各位帮忙看看

问题相关代码,请勿粘贴截图

import os
import tkinter
from tkinter import *
import tkinter.filedialog as fd

import numpy
from HTMLTable import HTMLTable
import openpyxl

def openFloder():
folder_path=fd.askdirectory()#打开文件
show_folderPath.delete(0,END) #清空
show_folderPath.insert(0,folder_path) #写入路径
path="D:/test/"
wb = openpyxl.load_workbook('D:/test.xlsx')
ws = wb['Sheet1']
row = ws.max_row#当前最大的行数

#获取Excel第一列所有的数据
a=[]
for x in range(2, row + 1):
b=ws.cell(x,1).value
print(b)
b1=str(b)
a.insert(1,b1)
print("数组",a)

#读取路径下的文件并打印在控制台
list1 =[]
list2=numpy.array([])
for file in os.scandir(folder_path):
#print(file)#打印在控制台
# 读取最后一个 - 之后的字符
Firstname = file.name
FirstList = Firstname[0:Firstname.rfind('-')]
#print(FirstList)
# 截取Firstname到下一个-之前的字符串,name是获取到的序列号,用list集合装起来
name = FirstList[FirstList.rfind('-'):]
# print(name[name.rfind('-'):])
# print('数据是:',name)
list1.append(name)
#vector=numpy.array(list1)
#
for num in list1:
#得到文件名内的序列即
# print(num)
# 获得list1里面的每一个num在a数组(Excel的第一列)对应的下标即所在的行数
x=a.index(num)
print(num,'在vector对应的下标是',x)
if name in a and file.is_dir()==True:
print(True)
print('此时i的值为',x+2)
print('要修改的文件名称为:',file.name)
NewName = file.name + '-' + ws.cell(x+2, 2).value
os.rename(file.path,path+NewName)
print('修改后的文件名为:',NewName)
else:
print(False)
root=Tk()
root.title("改名") #窗口标题
root.geometry("400x400")#窗口大小

show_folderPath=Entry(root)
show_folderPath.grid(row=1,column=2)

btn=Button(root,text="选择文件",command=openFloder)#设置一个按钮
btn.grid(row=1,column=2)

root.mainloop()

运行结果及报错内容

现在的运行结果是这样的:

img

这是报错的信息:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\30305\AppData\Local\Programs\Python\Python38\lib\tkinter_init_.py", line 1892, in call
return self.func(*args)
File "C:/Users/30305/PycharmProjects/test/Window.py", line 58, in openFloder
os.rename(file.path,path+NewName)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'D:/test\-1-3453' -> 'D:/test/-1-3453-按错'

  • 写回答

1条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2022-05-21 19:53
    关注

    for file in os.scandir(folder_path)
    是不是每次重命名后,循环索引出了问题,你试着先把scandir()的结果保存到一个列表里,再用for循环遍历这个列表去改名。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月21日

悬赏问题

  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强