Передать данные фрейма в переменную и сравнить наименования
В одной из колонок .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 шт):
Я бы делал это так - проверяем в цикле входит ли 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)