Как я могу переименовать загруженный файл в a для l oop, если файлы имеют одинаковые имена? - PullRequest
0 голосов
/ 27 февраля 2020

Я использую Selenium в Python для загрузки одного и того же файла, но каждый раз с разными входами. Так, например, я загружаю данные с выбором страны «Китай». На следующей итерации я загружаю те же данные, но для страны "Бразилия".

Я пытаюсь найти простой для понимания синтаксис, который можно использовать для переименования загруженных файлов. Файлы в настоящее время загружаются как «Data.csv» и Data (1) .csv. «Мне нужны только« China-Data.csv »и« Brazil-Data.csv. »

. соответствующий код, который я создал для этого:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

ChromeOptions=webdriver.ChromeOptions()
driver =webdriver.Chrome('Users/yu/Downloads/chromedriver')

inputcountry.send_keys('China')
inputcountry.send_keys(Keys.RETURN)

Я прочитал этот пост , но я не знаю, как создать forl oop, который может адаптировать его к выпуск файлов с тем же именем, но с номерами в конце. Пример: Данные (1) .csv, Данные (2) .csv, Данные (3) .csv

Спасибо

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Поскольку вы знаете имя загружаемого файла, вы можете переименовать его как go. Может быть сложно узнать, когда загрузка завершится, поэтому я использовал метод опроса.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os
import time
import shutil

download_file = os.path.expanduser("~/Downloads/Data.csv")
save_to_template = os.path.expanduser("~/Documents/Data-{}.csv")

# remove stale files
if os.path.isfile(download_file):
    os.remove(download_file)

ChromeOptions=webdriver.ChromeOptions()
driver =webdriver.Chrome('Users/yu/Downloads/chromedriver')

countries = ['China', 'Malaysia', 'Brazil']

for country in countries:
    inputcountry.send_keys(country)
    inputcountry.send_keys(Keys.RETURN)

    # one option is to poll for file showing up.... assuming file
    # is renamed when done
    for s in range(60): # give it a minute
        if os.path.exists(download_file):
            shutil.move(download_file, save_to_template.format(country))
            break
    else:
        raise TimeoutError("could not download {}".format(country))
0 голосов
/ 27 февраля 2020

Если вы знаете порядок ваших файлов (т.е. вы знаете, что данные (1) должны называться China-Data, данные (2) должны называться Brazil-Data и т. Д. c.), Тогда вам просто нужно используйте список и переименуйте все файлы в соответствии с ним.

import os 

directory = 'Users/yu/Downloads/chromedriver/'
correct_names = ['China-Data.csv','Brazil-Data.csv']

def rename_files(directory: str, correct_names: list) -> None: 
    # change the name of each file in the directory
    for i, filename in enumerate(sorted(os.listdir(directory))): 
        src = directory + filename 
        dst = directory + correct_names[i]
        os.rename(src, dst) 

Каждый раз, когда вы делаете inputcountry.send_keys('China'), вы можете добавлять в список correct_names любые вводимые вами данные, например correct_names.append('China-Data.csv').

В конце вы можете вызвать rename_files со списком правильных имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...