Использование панд для переименования файлов - правда об ошибке значения
Я пытаюсь написать программу, которая позволяет мне переименовывать файлы с помощью таблицы Excel, и я продолжаю получать одно и то же сообщение об ошибке. Я действительно ценю любую помощь. Ошибка:
ValueError: Значение истинности Серии неоднозначно. Используйте a.empty, a.bool(), a.item(), a.any() или a.all ().
Вот мой текущий код:
import os
import pandas as pd
os.chdir('C:\\Users\\sferrier\\Desktop\\Test 1')
xl = pd.read_excel('rename_test.xlsx')
df = pd.DataFrame(xl, columns=["Orginal File Name","New File Name"])
for file in os.listdir():
if file == df["Orginal File Name"]:
os.rename(file, df["New File Name"])
else:
print(file + "was not renamed")
2 ответа
Попробуйте это после построения df
:
for x in df.values.tolist():
os.rename(x[0], x[1])
или если вам нравятся явные имена переменных:
for index, row in df.iterrows():
os.rename(row["Orginal File Name"], row["New File Name"])
Проблема в этом блоке
for file in os.listdir():
if file == df["Orginal File Name"]:
os.rename(file, df["New File Name"])
else:
print(file + "was not renamed")
В частности, в этой строке
if file == df["Orginal File Name"]:
Проблема с этой линией в том, что переменная file
это одна строка, тогда как df["Orginal File Name"]
это целый столбец. По сути, вы пытаетесь сравнить одну строку с массивом, содержащим целый набор строк.
Чтобы исправить это, вы можете перебирать строки, например
for file in os.listdir():
for index, row in df.iterrows():
os.rename(row["Orginal File Name"], row["New File Name"])
РЕДАКТИРОВАТЬ
FileNotFoundError
что OP получает, вероятно, потому, что в вашем фрейме данных есть имя файла, которого на самом деле нет в каталоге. Вы можете запустить следующий блок
for file in os.listdir():
for index, row in df.iterrows():
try:
os.rename(row["Orginal File Name"], row["New File Name"])
except:
print(row["Orginal File Name"])
Этот блок позволит вам продолжить работу, даже если файл отсутствует в вашем каталоге, и распечатает имена файлов, которых нет.