首页 > 解决方案 > 在 Python 脚本的帮助下,使用 Excel 表中的名称映射重命名文件夹中的文件名

问题描述

文件夹中有许多 CSV 文件,我希望将其重命名。有一个 Excel 表,其中包含要重命名为文件夹的文件的名称。

文件夹中的文件命名为

TestData_30April.csv
TestData_20April.csv
TestData_18April.csv etc

而 excel 表包含的名称为

0.25-TestData_30April
0.98-TestData_20April
0.33-TestData_20April etc

此外,excel 表中的第一行包含标题名称,而病房的第 2 行包含要重命名的文件名。

我的目标是将 TestData_30April.csv 重命名为 0.25-TestData_30April.csv,同样适用于所有其他文件。

这是代码:

#Excel Sheet containing name of files to be renamed in that folder
path="C:\\Users\\Desktop\\Test_Data\\Test_Summary.csv"

#Folder Containg all orginal file names
dir = "C:\\Users\\Desktop\\Wear_Data"

wb = xlrd.open_workbook(path) 
sheet = wb.sheet_by_index(0)
sheet.cell_value(0, 0)

#In excel sheet column X or col_values(23) contains the file name to be renamed
print(sheet.col_values(23)) 

list_of_filename_in_folder = [] # name of the files in the folder
list_of_filename_in_excel = [] #name of the files in excel
path_to_folder = ''  # base path of folder
for name in list_of_filename_in_excel:
    excel_file_name = os.path.join(path_to_folder, name,'.csv')
    newname = name
    if '-' in name:
        newname = name.split('-')[1]
    dir_file_name = os.path.join(path_to_folder,newname,'.csv' )

    if os.path.exists(dir_file_name):
        print('changing file name {} to {}'.format(newname,name))
        os.rename(dir_file_name, excel_file_name)
    else:
        print('no file {} with name found in location'.format(newname+'.csv')

这是错误:

XLRDError: Unsupported format, or corrupt file: Expected BOF record; 

请帮助解决此错误。

标签: pythoncsvfile-rename

解决方案


尽管您可以使用 Excel 打开 csv 文件,但.csv文件与通常的 excel 文件不同(以 结尾.xlsx)。Python 提供了一种非常方便的处理 csv 文件的方法:csv 模块.

假设您的数据看起来像您的示例,您可以执行以下操作:

import csv
import os

path= 'C:\\Users\\Desktop\\Test_Data\\Test_Summary.csv'
dir = 'C:\\Users\\Desktop\\Wear_Data'
# open the .csv file with the csv module
with open(path, 'r') as f:
    csv_file = csv.reader(f)
    # read the new file name from every row 
    for row in csv_file:
        # assuming the new file path is stored in the first column (= row[0])
        new_file_name = row[0] + '.csv'
        # your old file should always have the same pattern according to your example
        old_file_name = new_file_name.split('-')[1] + '.csv'
        old_file = os.path.join(dir, old_file_name)
        new_file = os.path.join(dir, new_file_name)
        # rename the file
        os.rename(old_file, new_file)

我没有测试这个片段,但我认为它展示了如何使用该csv模块工作的基本原则。


推荐阅读