Les personnes expérimentées qui utilisent principalement PHP parlent du 4ème jour de démarrage de Python (sous-processus)

introduction

Je pensais que j'écrirais le 4ème jour tel qu'il est après le 3ème jour de démarrage de Python, mais cela semble être assez long, alors j'ai décidé de préparer une nouvelle histoire du 4ème jour et de la déplacer. Cette fois, l'histoire principale est d'utiliser l'exécutable de PHP dans le sous-processus de Python. Je pense que cela sera utile pour les applications où Python est utilisé dans le cadre des fonctions Linux. C'est proche du traitement par lots, mais il a également l'avantage de l'exécuter en Python.

Refus de la raison pour laquelle l'histoire saute

Ceux qui étudient (recherchent) les langages de programmation écrivent des contenus systématiquement organisés. Je pense que tout le monde est merveilleux. Dans mon cas, je suis en position d'utiliser un ordinateur ou un langage de programmation comme outil, donc c'est différent du flux général car je recherche et façonne à chaque fois le contenu nécessaire. Si vous commencez "quelque chose comme", cela sera nécessaire, veuillez donc prendre et utiliser uniquement la pièce de référence.

1. 1. Examiner le format de fichier (identifier Word Excel PowerPoint PDF sans extension)

Puisqu'il est nécessaire de vérifier le format du fichier supprimé du WEB, en PHP, ce qui suit a été exécuté pour vérifier la valeur de retour et ajouter l'extension de fichier. De nombreux programmes déterminent toujours ce qu'est le fichier en regardant l'extension du fichier, vous devez donc le faire ici. Ce sera probablement inutile à l'avenir, mais c'est toujours nécessaire maintenant.

file.php


exec('file -i -b data/default.xlsx', $out, $ret);
echo $out[0];
//La valeur de retour est la suivante
// application/vnd.ms-excel; charset=binary

file.py



import subprocess
args = ['file','-i','-b','default.xlsx']
proc = subprocess.run(args,stdout = subprocess.PIPE, stderr = subprocess.PIPE)
string = proc.stdout.decode("utf8")
none = 'no'
if string.find('excel') < 0:
	print(none)
elif string.find('excel') > 0:
	print(string)
#La valeur de retour est la suivante
# application/vnd.ms-excel; charset=binary

PHP et Python ont naturellement la même valeur de retour.

2. Convertir un PDF en fichier texte

J'essayais également de faire cela avec le sous-processus, mais j'ai trouvé un moyen d'utiliser le module pdftotext en l'incorporant dans Linux, et je me demandais ce qui s'était passé. Vous pouvez trouver la méthode sur le lien suivant. Convertir un PDF en texte avec pdftotext Est-ce un article, le code n'est-il pas compliqué? Si vous y réfléchissez, il prépare même un écran d'affichage, je vais donc simplement utiliser le sous-processus comme référence plus tard. Comparons-le encore avec le code PHP.

pdftotext.php



$command ="pdftotext -layout -nopgbrk data/*.pdf";
shell_exec($command);

pdftotext.py



import subprocess
args = ['pdftotext','-layout','-nopgbrk','data/sjd23d_mn.pdf'] # (Ne convertit pas sauf si le nom du fichier est spécifié)
args = ['pdftotext','-layout','-nopgbrk',"data/*.pdf"] #(Peut être spécifié par des astériques avec double revêtement)
proc = subprocess.run(args)

Cela n'a pas fonctionné immédiatement et a commencé à fonctionner avec un léger changement, mais au début, je ne pouvais pas convertir en prenant le nom du fichier avec des astérisques. J'ai écrit ceci dans le code, mais si vous insérez la spécification du nom de fichier avec une double prudence, vous pouvez le spécifier avec des astériques. C'était inutile car je l'ai écrit sous forme de spécification des paramètres de sous-processus, mais cette différence est importante. (C'est pour moi)

3. 3. Convertir un PDF en image

pdftoppm.php



$command ="pdftoppm -jpeg data/*.pdf data/";
shell_exec($command);

pdftoppm.py



import subprocess
args = ['pdftoppm','-jpeg',"data/*.pdf","data/"]
args = ['pdftoppm','-jpeg','data/sjd23d_mn.pdf','data/']
proc = subprocess.run(args)

Le résultat semble inutile si vous ne spécifiez pas le nom du fichier lors de la conversion du PDF en image. Cela fonctionne un peu différemment de PHP. Il existe peut-être un moyen d'importer pdftoppm dans Python et de l'utiliser, mais c'est une autre fois.

4. Décompression du fichier compressé (pour traiter les caractères déformés dans le nom de fichier japonais)

unar.php



$command = 'unar -f data/data/selenium-master.zip -D -o data';
shell_exec($command);

unar.py



import subprocess
args = ['unar','-f','data/selenium-master.zip','-D','-o','data/']
#Si vous avez besoin d'un mot de passe
args = ['unar','-f','-p','passw','data/selenium-master.zip','-D','-o','data/']
proc = subprocess.run(args)

La décompression du fichier compressé semble bonne avec cela. 5.selenium Cela ne semble pas facile, je vais donc aller un peu plus loin.

6. Suppression groupée de dossiers et de fichiers

Cela était absolument nécessaire pour effacer les traces du fichier décompressé unar. Je vais d'abord vous montrer comment le faire en PHP. Je vais le faire avec Python, mais il semble y avoir différentes méthodes, donc je vais y réfléchir à partir de maintenant.

delete.php



foreach (glob($relative.'/data/*.*') as $file) {
  unlink($file);
}
foreach (glob($relative.'/data/*') as $file) {
  unlink($file);
  remove_directory($file);
}

function remove_directory($dir) {
    $files = array_diff(scandir($dir), array('.','..'));
    foreach ($files as $file) {
        //Traitement séparé par fichier ou répertoire
        if (is_dir("$dir/$file")) {
            //S'il s'agit d'un répertoire, appelez à nouveau la même fonction
            remove_directory("$dir/$file");
        } else {
            //Supprimer si fichier
            unlink("$dir/$file");
            //echo "Fichier:" . $dir . "/" . $file . "Effacer\n";
        }
    }
    //Supprimer le répertoire spécifié
    return rmdir($dir);
}

delete.py



import pathlib
import shutil
p = pathlib.Path('selenium-master')
shutil.rmtree(p)

--Supprimez les fichiers et répertoires dans le répertoire spécifié par Python à la fois (enfin, c'est une belle personne)

all_del.py



import shutil
import glob
import os
#Une liste de fichiers et de dossiers dans le répertoire my_Mettez-le dans la liste.
my_list = glob.glob("./data/*")
# my_Faites circuler le contenu de la liste jusqu'à la fin.
for value in my_list:
#Séparez les commandes à supprimer selon qu'il s'agit de fichiers ou de dossiers.
	if os.path.isfile(value):
		os.remove(value)
	elif os.path.isdir(value):
		shutil.rmtree(value)

Il n'y a aucun autre site qui publie cette méthode et ce code. Vous pouvez également l'utiliser pour sélectionner l'extension du fichier que vous souhaitez effacer. Par-dessus tout, je voulais effacer le fichier décompressé. S'il existe une méthode plus belle, faites-le moi savoir.

7. Assainir

Les fonctions sont fournies en standard en PHP, mais il semble que Python soit rarement vu.

sanitizing.php



$wfull = htmlspecialchars($wtarget, ENT_QUOTES);

Il semble y avoir une telle méthode, mais j'aimerais l'examiner un peu plus.

sanitizing.py



import cgi
inlist = 'https://www.yahoo.co.jp/'
transform = cgi.escape(inlist)
print(transform)
# https://www.yahoo.co.jp/
inlist = '"><script>alert(document.cookie);</script>'
transform = cgi.escape(inlist)
print(transform)
#Eh bien, vous pouvez gérer la désinfection
# "&gt;&lt;script&gt;alert(document.cookie);&lt;/script&gt;

Recommended Posts

Les personnes expérimentées qui utilisent principalement PHP parlent du 4ème jour de démarrage de Python (sous-processus)
Les personnes expérimentées qui utilisent principalement PHP parlent du 4ème jour de démarrage de Python (sous-processus)
Les personnes expérimentées qui utilisent principalement PHP parlent du 5ème jour après le démarrage de Python (sélénium) PHP vs Python
Les personnes expérimentées qui utilisent principalement PHP parlent du 4ème jour de démarrage de Python (sous-processus)
Les personnes expérimentées qui utilisent principalement PHP parlent du 4ème jour de démarrage de Python (sous-processus)
Les personnes expérimentées qui utilisent principalement PHP parlent du 5ème jour après le démarrage de Python (sélénium) PHP vs Python
À propos des fonctionnalités de Python
Le 14 mars est le jour du rapport de circonférence. L'histoire du calcul du ratio de circonférence avec python
À propos de la liste de base des bases de Python
À propos du code Python pour une moyenne mobile simple en supposant l'utilisation de Numba
À propos de l'environnement virtuel de Python version 3.7
À propos des fonctionnalités de Python
Le 14 mars est le jour du rapport de circonférence. L'histoire du calcul du ratio de circonférence avec python
À propos de la liste de base des bases de Python
À propos du code Python pour une moyenne mobile simple en supposant l'utilisation de Numba
À propos de l'environnement virtuel de Python version 3.7
[Python2.7] Résumé de l'utilisation du sous-processus
Résumé des différences entre PHP et Python
Écrire une note sur la version python de python virtualenv
Traitement d'image? L'histoire du démarrage de Python pour
[Note] À propos du rôle du trait de soulignement "_" en Python
[Python] Get the day (anglais et japonais)