Как переименовать файл программным способом, когда он автоматически загружается в Python -Selenium? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть сценарий Selenium (Chrome), который переходит по URL-адресу и последовательно загружает несколько файлов. Но все имена gibberi sh, и поэтому ни Selenium, ни Chrome не могут контролировать имя загруженного файла. Итак, что я хочу сделать, это посмотреть каталог загрузки для всех новых файлов, которые создаются, а затем переименовать их при создании на собственное имя.

Как мне go узнать об этом? Я слышал, что watchdog - хороший пакет для создания и регистрации EventListener. Но тогда как мне динамически передать обработчику определенное имя, когда срабатывает событие on_created? watchdog - правильный путь к go или есть какое-то другое решение, которое может работать?

ПРИМЕЧАНИЕ. Я попытался получить все данные в каталоге, используя 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)

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Ответ здесь .

@ 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)
0 голосов
/ 01 мая 2020

ты пытался дождаться загрузки файла. Если вы сделали это, вы можете просто получить последний файл по max (list_of_files, key = os.path.getctime) и изменить последнее имя файла. После изменения файла вы можете начать скачивать другие файлы

...