В папке много файлов 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;
Просьба помочь в устранении этой ошибки.
это файл CSV
Затем вы должны использовать csv
модуль, чтобы открыть файл.
Я не уверен, потому что я никогда не использовал xlrd, но если это действительно csv, то, возможно, это не лучший способ загрузить файл? В Python есть библиотека csv
.
как изменить это здесь
Хотя вы можете открывать файлы csv с помощью Excel, файлы .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
.
FileNotFoundError: [WinError 2] Система не может найти указанный файл: 'C:\\Users\\Desktop\\Test_Data\\Test_Summary.csv' -> 'C:\\Users\\Desktop\\Wear_Data\\0.25- TestData_30April'
Мой фрагмент кода работает с путями, которые вы указали в своем вопросе. Однако вы получаете сообщение об ошибке, в котором говорится, что эти файлы/пути не существуют.
trotta, теперь все работает нормально. Спасибо за модификацию
файл для переименования находится в столбце-d на листе csv, а столбцы a,b,c содержат некоторые другие данные. Как читать только столбец C?
Вы можете print
весь row
увидеть, какой столбец индекса C имеет (первый элемент list
имеет индекс 0). Предполагая, что A имеет индекс 0, столбец C должен быть доступен с помощью row[2]
.
Это действительно лист Excel или файл csv, как вы предлагаете в
path
?