我之所以要写这段代码,是因为我需要转到一个文件夹,其中包含几个需要更改名称的图像。我需要从文件名中获取有用的数字,在excel文件中搜索该数字,为该行返回相应的值,但返回一个不同的列,然后用在不同列中找到的新值重命名该文件。我还需要它知道从文件名中获得的有用数字是否存在于第1列或第2列中(值是否存在于Nbr1或Nbr2中?)。我的问题是文件名上的“有用数字”是一个字符串,而Excel中的值是数字。我尝试将它们都更改为string或integer,但是DataFrame的列仍然是一个对象,因此我无法遍历它并找到所需的值。你知道吗
Nbr1 Nbr2 Nbr3
456 9630 778899
123 8520 445566
999 7410 112233
例如,如果一个图像名为“”999-3.jpeg“,我希望它被重命名为*”112233c.jpeg“,”112233“是Excel文件另一列中“999”的对应值。你知道吗
请随意批评我的代码,我知道它不是太有组织或干净,但我最关心的是让它工作。非常感谢你的帮助。你知道吗
我使用了pandas和os,并多次将文件名和数据帧中的值从string更改为integer。我还将每一列存储在一个变量上,以查看是否可以对它们进行迭代,但没有成功。你知道吗
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”时。我可以更具体的错误代码在几个小时内。你知道吗
Edit:我目前遇到的问题是,代码可以工作并进行迭代,但它在Excel列中找不到值(即使我知道它在那里),而且它跳过if,只打印else语句。你知道吗
我没有完全理解你的代码,但这里有一些观察。你知道吗
您可以使用以下方法更改数据帧值:
它们将成为“object”类型,但这对于字符串的赋值/比较来说是很好的。你知道吗
要在数据帧上迭代,可以使用:
它将返回要迭代的数据帧的行和整行的索引。然后,要获取当前行中某列的某些值,只需使用:
相关问题 更多 >
编程相关推荐