Использование панд для переименования файлов - правда об ошибке значения - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь написать программу, которая позволяет мне переименовывать файлы с помощью электронной таблицы 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 ]

0 голосов
/ 13 декабря 2018

Проблема в этом блоке

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"])

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

0 голосов
/ 13 декабря 2018

попробуйте это после построения 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"])
...