Exécutez le script python en PHP (ajoutez-le à Pandas df et enregistrez le fichier)
P粉536532781
P粉536532781 2024-03-27 21:05:37
0
1
490

Lorsque l'utilisateur sélectionne un fichier xlsx et le soumet via POST, je souhaite prendre le fichier, le mettre dans un pandas df, effectuer un nettoyage/formatage des données, puis le renvoyer au navigateur sous forme de fichier CSV téléchargeable.

J'ai le script python/pandas qui fonctionne bien. J'ai réussi à transmettre avec succès une simple variable $PHP (le nom de fichier) à un script Python, à l'imprimer en Python, puis à la renvoyer en PHP. ... mais je ne peux pas exécuter le reste du script Python (la partie pandas). C'est comme si le reste de mon script n'existait pas.

Ce que je fais, c'est :

  1. Déplacez les fichiers temporairement validés de $_FILES vers un autre dossier appelé "uploads" (même répertoire).
  2. Obtenez le chemin du nouveau fichier enregistré.
  3. Transmettez ceci dans un script Python et enregistrez le fichier formaté pour le télécharger/terminer - Je pense que c'est là que j'ai échoué quelque part

(Je n'ai pas compris comment renvoyer le fichier au navigateur - j'essaie juste d'obtenir le fichier en premier).

J'ai installé python venv dans le dossier htdocs et il est activé.

Mon PHP :

$fname = $_FILES["upload"]["tmp_name"];
$upload_path = 'uploads/' . $fname;

$output = shell_exec('/Applications/MAMP/htdocs/venv/bin/python3 /Applications/MAMP/htdocs/data_cleanse.py ' . $upload_path);
echo $output;

Mon Python fonctionne :

import sys
print("Variable passed to Python is: " + sys.argv[1])

Mon Python ne fait rien (fonctionne lorsque j'utilise le nom de fichier normal sub sys.argv[1]) :

import sys
import pandas as pd

uploaded_file = sys.argv[1]

df = pd.read_excel(uploaded_file)
df.to_csv('uploads/completed/completed_doc.csv')

Je n'ai pas encore essayé d'imprimer df en PHP. Je veux juste voir si je peux générer un fichier csv.

J'ai essayé escapeshellcmd et system sans succès. J'ai lu une question très similaire ici qui mentionnait chmod 777 pour définir les autorisations. J'ai fait cela pour modifier les autorisations et maintenant mon dossier est lisible et accessible en écriture par tout le monde, mais cela ne fonctionne toujours pas.

Je suis confus car tout semble bien fonctionner et connecté sauf la partie pandas. Quelqu'un peut-il m'aider ? Je suis nouveau sur PHP et je l'apprécie vraiment.

P粉536532781
P粉536532781

répondre à tous(1)
P粉488464731

On dirait que vous êtes proche. Le problème est que PHP est géré côté serveur, donc si vous souhaitez que le POST renvoie le code de la page Web, renvoyez le HTML, car PHP est utilisé pour générer du HTML côté serveur.

Si vous avez un moteur PHP sur votre serveur, vous pouvez enregistrer le côté serveur PHP et renvoyer un lien public vers la page PHP nouvellement créée dans la réponse POST.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal