有个文件夹里的所有后缀为. txt的文件需要修改名称,但保留. txt后缀名 修改名称参考rename.csv中的映射关系,第一列是原来文件的名称,第二列是文件现在的名字,要求将文件夹内的文件名称都改为第二列的名称
题主你好,回答结构为:参考代码,参考CSV映射,参考的效果图
import os
import pandas as pd
csv_file = 'D:/pythonProject/request.csv' # csv文件路径
df = pd.read_csv(csv_file, encoding = 'gbk') # 看情况在utf-8和gbk做选择
df['add'] = df['old'].map(str)+'/'+df['new'].map(str) # 在csv中临时创造新列add作为准备工作,分割符为/
goal = [i.split('/') for i in list(set(df['add']))] # 将add列转换为大列表镶嵌子列表的结构
directory = 'D:/pythonProject/' # 你的文件夹路径
files = os.listdir(directory) # 获得文件夹内的所有文件名
for file in files:
if file.endswith('.txt'): # 选择以txt文件
for index in range(0, len(goal)):
if file.strip('.txt') in goal[index][0]: # 判断文件名是否在csv的old列,也可以是if file.strip('.txt') == goal[index][0]
os.rename(file, goal[index][1]+'.txt') # 如果是,则替换为对应new列
goal.remove(goal[index])
你题目的解答代码如下:
import os
import pandas as pd
df = pd.read_csv(r'rename.csv', encoding='gbk') #或编码改成utf-8
path=r"E:\xxx" # 要改名文件所在的文件夹
for idx, row in df.iterrows():
file_path = os.path.join(path,str(row['A列'])+".txt")
file_path2 = os.path.join(path,str(row['B列'])+".txt")
if os.path.isfile(file_path):
os.rename(file_path, file_path2)
print(file_path,"改名为",file_path2)
改名后
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!