RENDER - Importer donnée

Bonjour à tous,

Je cherches à importer des données dans un google sheet, ces données sont stockés en local "C:\tmp", j'ai créer un script en python :

import os
import pandas as pd
from flask import Flask, jsonify

# Initialiser l'application Flask
app = Flask(__name__)

# Spécifier le chemin du dossier à analyser (à définir en dur)
folder_path = r'C:\tmp'

# Vérifier si le dossier existe
if not os.path.exists(folder_path):
    print(f"Erreur : Le dossier '{folder_path}' n'existe pas.")
    exit()

# Fonction pour importer uniquement la colonne 'Info' d'un fichier CSV

def import_csv_info_column(file_path, delimiter='='):
    try:
        # Lire le fichier CSV
        df = pd.read_csv(file_path, sep=delimiter, names=[
                         "Lib", "Info"], encoding='latin-1')

        # Suppression des lignes vides et des informations non pertinentes
        df.dropna(subset=['Info'], inplace=True)
        df = df[~df['Info'].isin(["0", "0.0", "0.00", "0.000"])]

        # Conversion de la colonne 'Info' en liste
        info_data = df['Info'].tolist()

        return info_data
    except FileNotFoundError:
        print(f"Erreur : le fichier '{file_path}' n'a pas été trouvé.")
    except pd.errors.EmptyDataError:
        print("Erreur : le fichier est vide.")
    except pd.errors.ParserError:
        print("Erreur : le fichier ne peut pas être analysé, vérifiez le délimiteur.")
    except Exception as e:
        print(f"Une erreur est survenue : {e}")
    return []

# Fonction pour collecter les données de la colonne 'Info' de tous les fichiers du dossier sélectionné

def collect_info_from_folder(folder_path):
    all_info_data = []
    for filename in os.listdir(folder_path):
        if (filename.endswith(".don") or filename.endswith(".don99")) and "ECO" in filename:
            file_path = os.path.join(folder_path, filename)

            # Vérifier si le fichier est bien un fichier (pas un sous-dossier)
            if os.path.isfile(file_path):
                # Importer les données du fichier CSV
                info_data = import_csv_info_column(file_path)

                if info_data:
                    all_info_data.append({
                        "filename": filename,
                        "info": info_data
                    })
    return all_info_data

# Collecter les données du dossier sélectionné
collected_info = collect_info_from_folder(folder_path)

# Définir une route pour afficher les données sur le localhost

@app.route('/')
def datas():
    if not collected_info:
        return jsonify({"message": "Aucune donnée trouvée dans le dossier sélectionné."})
    return jsonify({"collected_info": collected_info})

# Lancer le serveur Flask
if __name__ == '__main__':
    app.run(debug=True)

et un script dans un document Google sheet:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom Menu')
      .addItem('Run Web Service', 'callWebService')
      .addToUi();
}

function callWebService() {
  var dossierNumber = '530302446'; // Ce numéro peut être variable, vous pouvez le récupérer dynamiquement si nécessaire
  var url = 'https://flask-hello.onrender.com' //+ dossierNumber; // Ajouter le numéro de dossier comme paramètre

  var response = UrlFetchApp.fetch(url);
  Logger.log(response.getContentText()); // Log pour le débogage
  // Parse the JSON response
  var data = JSON.parse(response.getContentText());

  // Get the active sheet
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // Write the data to a specific cell
  //sheet.getRange('H7').setValue(data['data']);
  writeToSheet(data);
}

function writeToSheet(jsonData) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // Flatten the JSON object into an array of objects
  var data = [];
  for (var key in jsonData) {
    jsonData[key].forEach(function(item) {
      data.push(item);
    });
  }

  // Write data to the sheet
  var headerWritten = false;
  data.forEach(function(obj) {
    var row = [];
    for (var key in obj) {
      if (!headerWritten) {
        sheet.appendRow(Object.keys(obj)); // Write header row
        headerWritten = true;
      }
      row.push(obj[key]);
    }
    sheet.appendRow(row);
  });
}

ça ne fonctionne pas, Render me retourne 'Erreur : Le dossier 'C:\tmp' n'existe pas.', on dirait qu'il n'arrive à communiquer en local, j'ai executer le code Python en local, ça fonctionne correctement, mais je n'arrive pas déployer l'APIWEB sur RENDER à cause de ce message.

Il y a t-il une astuce pour contourner ça ?

Merci à vous

Salut ! Essaye avec un server Node

Rechercher des sujets similaires à "render importer donnee"