Переименуйте имена файлов в папке с помощью Python Script, используя карту имен из листа 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; 

Просьба помочь в устранении этой ошибки.

Это действительно лист Excel или файл csv, как вы предлагаете в path?

trotta 22.05.2019 11:21

это файл CSV

Anand Patil 22.05.2019 11:22

Затем вы должны использовать csvмодуль, чтобы открыть файл.

trotta 22.05.2019 11:24

Я не уверен, потому что я никогда не использовал xlrd, но если это действительно csv, то, возможно, это не лучший способ загрузить файл? В Python есть библиотека csv.

pmarcol 22.05.2019 11:25

как изменить это здесь

Anand Patil 22.05.2019 11:25
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
5
410
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя вы можете открывать файлы 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'

Anand Patil 22.05.2019 12:41

Мой фрагмент кода работает с путями, которые вы указали в своем вопросе. Однако вы получаете сообщение об ошибке, в котором говорится, что эти файлы/пути не существуют.

trotta 22.05.2019 13:52

trotta, теперь все работает нормально. Спасибо за модификацию

Anand Patil 27.05.2019 07:04

файл для переименования находится в столбце-d на листе csv, а столбцы a,b,c содержат некоторые другие данные. Как читать только столбец C?

Anand Patil 27.05.2019 08:45

Вы можете print весь row увидеть, какой столбец индекса C имеет (первый элемент list имеет индекс 0). Предполагая, что A имеет индекс 0, столбец C должен быть доступен с помощью row[2].

trotta 27.05.2019 15:43

Другие вопросы по теме