Передать данные фрейма в переменную и сравнить наименования

В одной из колонок .xlsx файла, содержащей цифры, нужно сверить значения ячеек с частью имени файлов в папке, и переименовать файлы, если имена схожи, дав каждому файлу наименование из других трех колонок xls/xlsx файла.

Как передать данные фрейма в переменную и сравнить наименования?

import numpy as np

from os.path import dirname
import pandas as pd
import re
from collections import defaultdict
from os import listdir
from os.path import isfile
from os.path import join

excel_data_df = pd.read_excel('E:\python\list_ost.xls', na_values=['NA'], sheet_name='Sheet1')
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]

Пример файла

Файлы в папке и имеют разные имена , часть имени каждого файла совпадает с значением ячейки в колонке - FileName.

Пример - значение в ячейке: 12325333444

Пример - название файла: sadfjf 12325333444.wav

После отработки программы файлы должны быть переименованы по принципу: Air_Brian_80.7_MD_12325333444.wav

Если в ячейке колонки пусто, то пропускаем данную строку и берем следующую.


Ответы (1 шт):

Автор решения: MaxU

Я бы делал это так - проверяем в цикле входит ли FileName в имя реального файла. если входит - формируем новое имя файла и переименовываем исходный файл:

import pandas as pd
from pathlib import Path

def mk_new_filename(filename, df):
    for i, row in df.iterrows():
        if str(row["FileName"]) in filename.name:
            return f.parent / (
                "{Name}_{Artist}_{RadioStation}_{FileName}".format(**row.to_dict())
                + filename.suffix).replace(" ", "_")
    return None

data_dir = Path("/path/to/files")
df = pd.read_excel("/path/to/list_ost2.xls")

for f in data_dir.glob("*"):
    new_fn = mk_new_filename(f, df)
    if new_fn:
        f.rename(new_fn)
→ Ссылка