在 Python-Selenium 中自动下载文件时,如何以编程方式重命名文件?
How do I rename a file programmatically when it is downloaded automatically in Python-Selenium?
我有一个 Selenium(Chrome) 脚本,它转到 URL 并按顺序下载一堆文件。但是名称都是乱码,因此 Selenium 和 Chrome 都无法控制下载文件的名称。所以我想做的是查看下载目录以查找创建的任何新文件,然后在创建时使用我自己选择的名称重命名它们。
我该怎么做?我听说 watchdog
是创建和记录 EventListener 的好包。但是,当 on_created
事件被触发时,我如何动态地向处理程序传递一个特定的名称? watchdog 是正确的方法还是有其他可行的解决方案?
注意:我确实尝试使用 glob
获取目录中的所有文件,然后通过比较 创建时间 更新最新文件的名称,但这会导致一个逻辑错误,因为它混淆了文件名,以防在执行此方法时新文件尚未下载。我已附上此方法的以下代码。
def __rename_downloaded_file(self, filename: str):
"""Rename the latest download file to the given name"""
# TODO create a listener instead of the while loop
while True:
# keep looping in case there are no file in directory.
list_of_files = glob.glob(f"{self.download_path}\*.pdf")
if len(list_of_files) > 0:
break
latest_file = max(list_of_files, key=os.path.getctime)
print(latest_file)
head, _ = os.path.split(latest_file)
new_filename = os.path.join(head, filename+'.pdf')
print(new_filename)
os.rename(latest_file, new_filename)
您是否尝试等待文件下载。如果你那样做,你可以通过 max(list_of_files, key=os.path.getctime) 获取最新文件并更改最新文件名。文件更改后您可以开始下载其他文件
答案是。
@Raghavendra Phayde 谢谢你让我加入这个话题。
您获得的下载列表按最新的下载时间戳排序。然后您可以使用以下代码重命名每个文件。
for old_filename, new_filename in zip(downloaded_file_names, rename_list):
head, _ = os.path.split(old_filename)
new_file_name_path = os.path.join(head, new_filename + '.pdf')
# print(old_filename)
# print(new_file_name_path)
# print('\n')
os.rename(old_filename, new_file_name_path)
我有一个 Selenium(Chrome) 脚本,它转到 URL 并按顺序下载一堆文件。但是名称都是乱码,因此 Selenium 和 Chrome 都无法控制下载文件的名称。所以我想做的是查看下载目录以查找创建的任何新文件,然后在创建时使用我自己选择的名称重命名它们。
我该怎么做?我听说 watchdog
是创建和记录 EventListener 的好包。但是,当 on_created
事件被触发时,我如何动态地向处理程序传递一个特定的名称? watchdog 是正确的方法还是有其他可行的解决方案?
注意:我确实尝试使用 glob
获取目录中的所有文件,然后通过比较 创建时间 更新最新文件的名称,但这会导致一个逻辑错误,因为它混淆了文件名,以防在执行此方法时新文件尚未下载。我已附上此方法的以下代码。
def __rename_downloaded_file(self, filename: str):
"""Rename the latest download file to the given name"""
# TODO create a listener instead of the while loop
while True:
# keep looping in case there are no file in directory.
list_of_files = glob.glob(f"{self.download_path}\*.pdf")
if len(list_of_files) > 0:
break
latest_file = max(list_of_files, key=os.path.getctime)
print(latest_file)
head, _ = os.path.split(latest_file)
new_filename = os.path.join(head, filename+'.pdf')
print(new_filename)
os.rename(latest_file, new_filename)
您是否尝试等待文件下载。如果你那样做,你可以通过 max(list_of_files, key=os.path.getctime) 获取最新文件并更改最新文件名。文件更改后您可以开始下载其他文件
答案是
@Raghavendra Phayde 谢谢你让我加入这个话题。
您获得的下载列表按最新的下载时间戳排序。然后您可以使用以下代码重命名每个文件。
for old_filename, new_filename in zip(downloaded_file_names, rename_list):
head, _ = os.path.split(old_filename)
new_file_name_path = os.path.join(head, new_filename + '.pdf')
# print(old_filename)
# print(new_file_name_path)
# print('\n')
os.rename(old_filename, new_file_name_path)