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.

Lea múltiples archivos CSV de una carpeta compartida de Google Drive utilizando Python.

Me gustaría crear una función para leer archivos de una carpeta compartida de Google Drive y concatenarlos en un df. Preferiría hacerlo sin usar autenticadores si fuera posible.

Utilicé este código que encontré aquí:

url = & # 39;https://drive.google.com/drive/folders/1_Hwl0tm6rfechhTF-YGVsOA0cbzu4jUd & # 39;
path = & # 39;https://drive.google.com/uc?export=download&id='+url.split(& # 39;/& # 39;)[-2]
df = pd.read_csv(path)

Quiero leer todos los archivos en la carpeta usando glob y concatenarlos en un df, pero obtengo el error HTTPError: HTTP Error 404: Not Found. Cualquier ayuda sería apreciada.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando leer archivos de una carpeta compartida de Google Drive y concatenarlos en un único dataframe sin utilizar autenticadores.

    Puedes utilizar la API de Google Drive para acceder a los archivos almacenados en Google Drive. Puedes utilizar el método list() para obtener una lista de archivos en la carpeta y el método get_media() para descargar los archivos. Luego puedes utilizar el módulo glob para leer los archivos y concatenate para concatenarlos en un único dataframe.

    Aquí hay un ejemplo de cómo puedes hacerlo:

    # Importa la API de Google Drive
    from googleapiclient.discovery import build
    
    # Crea una instancia de la API de Drive
    drive_service = build('drive', 'v3')
    
    # Obtiene una lista de archivos en la carpeta
    results = drive_service.files().list(q="'1_Hwl0tm6rfechhTF-YGVsOA0cbzu4jUd' in parents").execute()
    files = results.get('files', [])
    
    # Descarga los archivos
    for f in files:
        file_id = f['id']
        request = drive_service.files().get_media(fileId=file_id)
        fh = io.BytesIO()
        downloader = MediaIoBaseDownload(fh, request)
        done = False
        while done is False:
            status, done = downloader.next_chunk()
    
    # Lee los archivos utilizando glob
    files = glob.glob('*.csv')
    
    # Concatena los archivos en un único dataframe
    df = pd.concat([pd.read_csv(f) for f in files])
    

Comments are closed.