¿Cómo concatenar archivos recién descargados con Selenium?
Aquí está mi código:
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import time
import shutil
import os
import glob
import pandas as pd
PATH = "driver\chromedriver.exe"
driver = webdriver.Chrome(executable_path=PATH)
url = 'https://www.mergermarket.com/homepage'
driver.get(url)
deals = WebDriverWait(driver, 40).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="header"]/div/div[2]/nav/ul/li[4]/a')))
urldeals = deals.get_attribute("href")
driver.get(urldeals)
start_date = datetime.date(2021, 2, 1)
start_date = datetime.datetime.strftime(start_date, '%d/%m/%Y')
middle_date = datetime.date(2021, 2,15)
middle_date = datetime.datetime.strftime(middle_date, '%d/%m/%Y')
delta = datetime.timedelta(days=15)
n = 1
m = 3
while n <= m:
# Ruta de origen
source = f"sourcepath/{n}new.xlsx"
# Ruta de destino
destination = f"destinationpath/{n}new.xlsx"
driver.get(urldeals)
date = WebDriverWait(driver, 40).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="date-picker_from"]')))
date.click()
date.send_keys(start_date)
time.sleep(1)
date2 = WebDriverWait(driver, 40).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="date-picker_to"]')))
date2.click()
date2.send_keys(Keys.CONTROL + "a")
date2.send_keys(Keys.DELETE)
date2.send_keys(middle_date)
download = WebDriverWait(driver, 40).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="__next"]/div/div/div[1]/div/div[2]/div[1]/div/div/div[2]/button[1]')))
download.click()
time.sleep(3)
start_date = datetime.datetime.strptime(start_date, '%d/%m/%Y')
middle_date = datetime.datetime.strptime(middle_date, '%d/%m/%Y')
start_date = start_date + delta
middle_date = middle_date + delta
start_date = datetime.datetime.strftime(start_date, '%d/%m/%Y')
middle_date = datetime.datetime.strftime(middle_date, '%d/%m/%Y')
Initial_path = 'path/Downloads'
filename = max([os.path.join(Initial_path, f) for f in os.listdir(Initial_path)], key=os.path.getctime)
shutil.move(filename,os.path.join(Initial_path,f"{n}new.xlsx"))
shutil.copy(source, destination)
print("Archivo copiado exitosamente.")
n = n+1
time.sleep(1)
# Concatenar archivos
os.chdir('destinationpath')
extension = 'xlsx'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
combined_csv = pd.concat([pd.read_excel(f) for f in all_filenames ])
combined_csv.to_excel("combined.xlsx", index=False, encoding='utf-8-sig')
Y aquí está mi salida, antes de que se ejecutara el script la carpeta estaba vacía:
¿Cómo concatenar esos archivos en uno? Tienen las mismas variables, por lo que no debería ser tan difícil, pero no puedo entender cómo hacerlo. Sería genial si alguien pudiera darme algunos consejos.
davy.ai
Para concatenar los archivos, puede utilizar la biblioteca pandas en Python. Aquí están los pasos:
concat
de pandas:El código final se vería así:
Esto creará un nuevo archivo de Excel llamado “concatenated.xlsx” en el mismo directorio que el script de Python.