创建了一个函数,根据Excel中的匹配文件名重命名文件夹中的PDF文件,如何执行?



我有以下代码,其中包含包含两列的Excel文件的文件夹(PDF文件的原始名称和名为"匹配结果.xls的新名称所需列";以及此文件夹中包含的所有原始名称PDF文件。如何运行此代码以便重命名我的所有 PDF?

def rename_file(file_to_rename, source_file):
p = Path(file_to_rename)
filename = p.stem
wb = xlrd.open_workbook(r'C:\UsersChris Lee\Desktop\File_Rename_Python\Matched_Results.xls')
# excel file to get new filename????
sheet = wb.sheet_by_index(0)
for row_num in range(sheet.nrows):
row_value = sheet.row_values(row_num)
col = 2 # 'john smith' col number
if row_value[col] == filename:
new_filename = f'{row_value[col+1]}'  # format as you want
p.rename(Path(p.parent, new_filename + p.suffix))  # rename
break
def get_paths_in_directory(directory):
return Path(directory).glob('*.pdf')
if __name__ == "__main__":
source_file = r'C:\UsersChris Lee\Desktop\File_Rename_Python\Matched_Results.xlsx' # excel file to get new filename
source_directory = r'C:\UsersChris Lee\Desktop\File_Rename_Python' # directory where your files to rename are.
# iterate all pdf files in the given directory
paths = get_paths_in_directory(source_directory)
for file_to_rename in paths:
rename_file(str(file_to_rename), source_file)
if __name__ == "__main__":

的重点是检查代码是否直接运行而不是导入。由于您没有导入:

def rename_file(file_to_rename, source_file):
p = Path(file_to_rename)
filename = p.stem
wb = xlrd.open_workbook(r'C:\UsersChris Lee\Desktop\File_Rename_Python\Matched_Results.xls')
# wb should be the below variable instead
#wb = xlrd.open_workbook(source_file)

# excel file to get new filename????
sheet = wb.sheet_by_index(0)
for row_num in range(sheet.nrows):
row_value = sheet.row_values(row_num)
col = 2 # 'john smith' col number
if row_value[col] == filename:
new_filename = f'{row_value[col+1]}'  # format as you want
p.rename(Path(p.parent, new_filename + p.suffix))  # rename
print("the if was matched!", new_filename, Path(p.parent, new_filename + p.suffix))
break
def get_paths_in_directory(directory):
return Path(directory).glob('*.pdf')
if __name__ == "__main__":
source_file = r'C:\UsersChris Lee\Desktop\File_Rename_Python\Matched_Results.xlsx' # excel file to get new filename
source_directory = r'C:\UsersChris Lee\Desktop\File_Rename_Python' # directory where your files to rename are.
# iterate all pdf files in the given directory
paths = get_paths_in_directory(source_directory)
for file_to_rename in paths:
rename_file(str(file_to_rename), source_file)

您可以将if __name__ == "__main__":之后的所有内容替换为:

def my_func():
source_file = r'C:\UsersChris Lee\Desktop\File_Rename_Python\Matched_Results.xlsx' # excel file to get new filename
source_directory = r'C:\UsersChris Lee\Desktop\File_Rename_Python' # directory where your files to rename are.
# iterate all pdf files in the given directory
paths = get_paths_in_directory(source_directory)
for file_to_rename in paths:
rename_file(str(file_to_rename), source_file)

并调用函数:

my_func()

所以你的整个Jupyter字段看起来像:

def rename_file(file_to_rename, source_file):
p = Path(file_to_rename)
filename = p.stem
wb = xlrd.open_workbook(r'C:\UsersChris Lee\Desktop\File_Rename_Python\Matched_Results.xls')
# excel file to get new filename????
sheet = wb.sheet_by_index(0)
for row_num in range(sheet.nrows):
row_value = sheet.row_values(row_num)
col = 3 # 'john smith' col number
if row_value[col] == filename:
new_filename = f'{row_value[col+1]}'  # format as you want
p.rename(Path(p.parent, new_filename + p.suffix))  # rename
print("the if was matched!", new_filename, Path(p.parent, new_filename + p.suffix))
break
def get_paths_in_directory(directory):
return Path(directory).glob('*.pdf')
def my_func():
source_file = r'C:\UsersChris Lee\Desktop\File_Rename_Python\Matched_Results.xlsx' # excel file to get new filename
source_directory = r'C:\UsersChris Lee\Desktop\File_Rename_Python' # directory where your files to rename are.
# iterate all pdf files in the given directory
paths = get_paths_in_directory(source_directory)
for file_to_rename in paths:
rename_file(str(file_to_rename), source_file)

my_func()

前提是您拥有所有需要的导入。

编辑:我与SO上的一些线程放在一起的函数 - 您需要弄清楚如何重命名文件,创建算法,然后在if语句中实现它。

import os
def rename_func(directory):
d = os.fsencode(directory)
for file in os.listdir(d):
filename = os.fsdecode(file)
if filename.endswith(".pdf"): 
# this is what your file will be renamed to
os.rename(os.path.join(d, filename), 'renamed_file.pdf')
rename_func(r"C:my_dir")

最新更新