使用熊猫重命名文件-值错误的真相

时间:2018-12-13 03:34:20

标签: python-3.x pandas python-os

我正在尝试编写一个程序,该程序允许我使用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 :(得分:1)

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

答案 1 :(得分:0)

问题出在这个区块

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

编辑

OP获取的FileNotFoundError可能是因为数据框中存在一个文件名,该文件名实际上不存在于目录中。您可以运行以下代码段

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

即使该文件不存在于目录中,该块也可以使您继续前进,并打印出不存在的文件名。