es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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:

output

¿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.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para concatenar los archivos, puede utilizar la biblioteca pandas en Python. Aquí están los pasos:

    1. Importe la biblioteca pandas:
    import pandas as pd
    
    1. Cree un DataFrame vacío:
    df_concatenated = pd.DataFrame()
    
    1. Recorra los archivos y léalo en DataFrames separados:
    for i in range(1, 4):
        file_path = f"destinationpath/{i}new.xlsx"
        df = pd.read_excel(file_path)
    
    1. Concatene los DataFrames verticalmente utilizando la función concat de pandas:
    df_concatenated = pd.concat([df_concatenated, df])
    
    1. Guarde el DataFrame concatenado en un nuevo archivo de Excel:
    df_concatenated.to_excel("concatenated.xlsx", index=False)
    

    El código final se vería así:

    import pandas as pd
    
    df_concatenated = pd.DataFrame()
    
    for i in range(1, 4):
        file_path = f"destinationpath/{i}new.xlsx"
        df = pd.read_excel(file_path)
        df_concatenated = pd.concat([df_concatenated, df])
    
    df_concatenated.to_excel("concatenated.xlsx", index=False)
    

    Esto creará un nuevo archivo de Excel llamado “concatenated.xlsx” en el mismo directorio que el script de Python.

Comments are closed.