当一个文件在Python-Selenium中自动下载时,我如何以编程方式重命名它?

问题描述 投票:0回答:1

我有一个Selenium(Chrome)脚本,它进入一个URL并依次下载了一堆文件。但是这些文件的名字都是乱码,因此Selenium和Chrome都无法控制下载文件的名字。所以我想做的是观察下载目录中是否有新文件被创建,然后在创建时用我自己选择的名字重新命名它们。

我该怎么做呢?我听说 watchdog 是一个很好的创建和记录EventListener的包。但是,当 on_created 事件被触发?是 监察机关 是正确的方法还是有其他的解决方案?

注意:我确实尝试过用以下方法抓取目录中的所有内容 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)
python-3.x selenium-webdriver listener file-rename python-watchdog
1个回答
0
投票

你是否尝试过等待文件下载。如果你这样做了,你可以通过max(list_of_files, key=os.path.getctime)获取最新的文件,然后修改最新的文件名。当文件改变后,你就可以开始下载其他文件了。


0
投票

答案是 此处.

@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)
© www.soinside.com 2019 - 2024. All rights reserved.