简体   繁体   中英

Rename the file names in the folder with the help of Python Script, using name map from Excel sheet

There are many CSV files in a folder which I want it to be renamed. There is an excel sheet which contains name of files to be renamed to folder.

The files in folder are named as

TestData_30April.csv
TestData_20April.csv
TestData_18April.csv etc

while the excel sheet contains the name as

0.25-TestData_30April
0.98-TestData_20April
0.33-TestData_20April etc

Also first row in the excel sheet contains Header name while row 2 on wards contains the file name to be renamed.

My Aim is to rename TestData_30April.csv to 0.25-TestData_30April.csv similarly for all other files as well.

Here is the Code:

#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')

Here is the error:

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

Kindly Help in resolving this error.

Although you might be able to open csv files with Excel, .csv files are not the same as usual excel files (ending with .xlsx ). Python comes with a very convenient way of handling csv files: The csv module .

Assuming your data looks like in your example, you could do the following:

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)

I did not test this snippet, but I think it shows the basic principles of how this could work using the csv module.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM