【发布时间】:2020-01-01 05:18:18
【问题描述】:
我正在编写此代码,因为我需要转到一个文件夹,该文件夹包含多个我需要更改名称的图像。我需要从文件名中获取有用的数字,在 excel 文件上搜索该数字,返回该行但不同列的对应值,并使用在不同列中找到的新值重命名文件。我还需要它知道从文件名中获得的有用数字是否存在于第 1 列或第 2 列中(该值是否存在于 Nbr1 或 Nbr2 中?)。我的问题是文件名上的“有用数字”是一个字符串,而Excel中的值是数字。我尝试将它们都更改为字符串或都更改为整数,但是 DataFrame 的列仍然是一个对象,所以我无法遍历它并找到我需要的值。
Nbr1 Nbr2 Nbr3
456 9630 778899
123 8520 445566
999 7410 112233
例如,如果一个图像被命名为 "999-3.jpeg" 我希望它被重命名为 *"112233c.jpeg","112233" 是 "999" 的对应值" 在 Excel 文件的另一列中。
请随意批评我的代码,我知道它不是太有条理或太干净,但我最关心的是让它工作。非常感谢你的帮助。
我使用过 pandas 和 os,并多次将文件名和 DataFrame 中的值从字符串更改为整数。我还将列存储在一个变量中,以查看是否可以迭代它们,但它不起作用。
import os
import pandas as pd
os.chdir("C:\\Users\\Documents\\Rename")
changes = {
"1":"a",
"2":"b",
"3":"c"
}
def pic_rename(separator):
table = pd.read_excel("List.xlsx")
df = pd.DataFrame(table)
column1 = df["Nbr1"]
column2 = df["Nbr2"]
name_list = []
for f in os.listdir():
file_name, file_ext = os.path.splitext(f)
if file_ext == (".jpg" or ".jpeg"):
useful_name, extra = file_name.split(separator)
useful_name = int(useful_name.strip())
name_list.append(useful_name)
counter1 = 0
counter2 = 0
for x in name_list:
if x in column1:
counter2 = 0
if counter1 == 0:
df = df.set_index("Nbr1", drop = True, append = False, inplace = False, verify_integrity=False)
result = df.loc[x, "Nbr3"]
extra = extra.strip()[-1]
final_name = str(result) + str(changes.get(extra))
os.rename(f, result + file_ext)
counter1 += 1
else:
result = df.loc[x, "Nbr3"]
extra = extra.strip()[-1]
final_name = str(result) + str(changes.get(extra))
os.rename(f, result + file_ext)
counter1 += 1
elif x in column2:
counter1 = 0
if counter2 == 0:
df = df.set_index("Nbr2", drop = True, append = False, inplace = False, verify_integrity=False)
result = df.loc[x, "Nbr3"]
extra = extra.strip()[-1]
final_name = str(result) + str(changes.get(extra))
os.rename(f, result + file_ext)
counter2 += 1
else:
result = df.loc[x, "Nbr3"]
extra = extra.strip()[-1]
final_name = str(result) + str(changes.get(extra))
os.rename(f, result + file_ext)
counter2 += 1
else:
print("This number isn't in Column 1 or 2")
else:
print("This file is not an image")
separator = input("Please insert the character that separates the useful name from the extra that you don't want")
pic_rename(separator)
我得到的最新错误是“TypeError:'int' object is not iterable”,但我又遇到了几个错误,主要是在尝试通过列(“Nbr1”)迭代文件名并尝试结果得到“Nbr3”。我可以在几个小时内更具体地了解代码错误。
编辑:我目前遇到的问题是代码可以工作和迭代,但它没有在 Excel 列中找到值(即使我知道它在那里),它正在跳过 if 并只打印我的 else 语句.
【问题讨论】: