<Python> Un quiz pour convertir par lots les noms de fichiers séparés par une chaîne de caractères spécifique dans le cadre du nom de fichier

Contexte

Quelqu'un en Python à https://qiita.com/ozaki25/items/33a57ad7eea55822c764. .. .. Parce que c'était une histoire Je l'ai écrit dans Slack pendant un moment, mais j'ai eu une histoire disant "Explication ~" (probablement) et je l'écrirai rapidement.

Le style d'écriture est mon propre passe-temps, il y a donc une meilleure façon de l'écrire! S'il vous plaît, faites-moi savoir.

Choses à faire

Une brève description du code Python

environnement

ubuntu 18.04 + python 3.7.6.

$ cat /proc/version
Linux version 4.15.0-111-generic (buildd@lcy01-amd64-011) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #112-Ubuntu SMP Thu Jul 9 20:32:34 UTC 2020

$ python3 -V
Python 3.7.6

Code publié

import os
import re
from glob import glob
p_file = glob("./*.csv")
_ = [ os.rename(file, re.sub(r'^.*_([0-9]{1,3}).*(\.csv)$', r'\1\2', file)) for file in p_file ] 

Pour une raison quelconque, le code collé dans Slack a été converti en code étrange. : intello: Veuillez lire ce code correctement.

En conséquence, cela s'est produit parce que le propriétaire de l'entrée a insisté sur "une ligne". .. Bien sûr, Python a également une CLI pour que je puisse le faire, mais je ne comprends pas pourquoi je me suis arrêté ici.


Création de données avec un seul liner? Cela semble donc un peu sale.

!touch aaa_1.csv;touch aaa_2.csv;touch aaa_4.csv;touch aaa_9.csv;touch aaa_10.csv;touch aaa_99.csv;touch aaa_100.csv;touch aaa_999.csv;touch aaa_1000.csv

Maintenant pour l'explication.

import os
import re
from glob import glob

Le nom du fichier est os.rename Expression régulière pour le remplacement du nom de fichier J'ai utilisé.

J'ai utilisé glob pour obtenir l'objet de liste de fichiers. J'utilise un pathlib similaire ces jours-ci, je n'utilise plus join.

p_file = glob("./*.csv")

Utilisez glob pour obtenir l'objet de liste de fichiers. Je ne voulais pas cibler de fichiers supplémentaires, mais comme glob ne prend pas en charge la correspondance de nombres, ce n'est pas une bonne idée d'obtenir toutes les extensions csv pour le moment. ... J'étais un peu accro.

_ = [ os.rename(file, re.sub(r'^.*_([0-9]{1,3}).*(\.csv)$', r'\1\2', file)) for file in p_file ] 

Oui, je ne sais pas sauf si je suis habitué. J'ai utilisé la notation d'inclusion pour réduire le nombre de lignes (bien qu'il y ait des avantages différents).

Cela ressemble à ceci si vous l'écrivez sans utiliser d'inclusions.

for file in p_file:
  re_file = re.sub(r'^.*_([0-9]{1,3}),*(\.csv)$', r'\1\2',p_file)
  os.rename(file, re_file)

Cela n'a pas beaucoup de sens d'attribuer le résultat à _, et si vous ne le spécifiez pas, le journal de la console n'est pas beau, c'est donc une mesure minutieuse pour l'empêcher d'apparaître.

[None, None, None, None, None, None, None, None, None, None]

qu'Est-ce que c'est. .. .. cette.

Le dernier est une expression régulière La pièce comportant 1 à 3 chiffres et la pièce d'extension sont extraites et assemblées (correspondance standard + remplacement). Il peut être un peu gentil de se limiter aux expressions régulières.

r'^.*_([0-9]{1,3}).*(\.csv)$' ⇛ r'\1\2'

Il est recommandé d'utiliser r (expression de chaîne de ligne) car il peut être exprimé sans échappement supplémentaire.

Deviation

Je m'inquiète de l'autorisation de lecture du fichier ou quelque chose du genre, mais je l'omets cette fois. Cependant, lorsque vous travaillez sans surveillance, il est préférable d'inclure les autorisations de contrôle d'existence de base / lecture / écriture.

Cela peut échouer avec os.rename, vous devriez donc également essayer ~ sauf. Cette fois, je me suis concentré sur la rapidité, alors je l'ai sauté (excuse: parapluie2 :)

Dans le code utilisé dans l'entreprise, le fichier CSV est lu et importé dans le DataFrame, mais une classe qui encapsule la vérification d'existence et la vérification de lecture / écriture est créée et exploitée.

À la fin

J'ai récemment été muté et comme je peux voir le tableau d'ensemble du projet dont je suis en charge, je me sens sous pression. .. .. Je suis soulagé d'écrire du code Python (je plaisante: sweat_smile :).

Recommended Posts

<Python> Un quiz pour convertir par lots les noms de fichiers séparés par une chaîne de caractères spécifique dans le cadre du nom de fichier
Obtenez le nom de la variable sous forme de chaîne de caractères.
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Convertir le code de caractère du fichier avec Python3
[Python] J'ai essayé d'obtenir le nom du type sous forme de chaîne de caractères à partir de la fonction type
Découpez une partie de la chaîne à l'aide d'une tranche Python
[Ansible] Exemple de playbook qui ajoute une chaîne de caractères à la première ligne du fichier
[Ruby] Comment remplacer uniquement une partie de la chaîne de caractères correspondant à l'expression régulière?
[Python3] Mettre en forme la chaîne de caractères en utilisant le nom de la variable comme clé
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
[python] Remplacez le nom du fichier image par un numéro de série
[Python] Programmation pour trouver le nombre de a dans une chaîne de caractères qui se répète un nombre spécifié de fois.
Comment compter rapidement la fréquence d'apparition des caractères à partir d'une chaîne de caractères en Python?
pandas Récupère le nom d'une colonne contenant un caractère spécifique
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
Python vba pour créer une chaîne de date pour créer un nom de fichier
Obtenez la formule dans le fichier Excel sous forme de chaîne en Python
[Python scraping] Affiche l'URL et le titre du site contenant un mot-clé spécifique dans un fichier texte
Un mémo organisé en renommant les noms de fichiers dans le dossier avec python
Django super introduction par les débutants Python! Partie 3 J'ai essayé d'utiliser la fonction d'héritage de fichier de modèle
Mayungo's Python Learning Episode 6: J'ai essayé de convertir une chaîne de caractères en nombre
[Python] Comment inverser une chaîne de caractères
Django super introduction par les débutants Python! Partie 2 J'ai essayé d'utiliser les fonctions pratiques du modèle
Je veux colorer une partie de la chaîne Excel avec Python
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
[Python] Récupère le code de caractère du fichier
[Introduction à Python] Une explication approfondie des types de chaînes de caractères utilisés dans Python!
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
L'histoire de la création d'un outil pour charger une image avec Python ⇒ l'enregistrer sous un autre nom
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
Différentes façons de lire la dernière ligne d'un fichier csv en Python
Divise la chaîne de caractères par le nombre de caractères spécifié. En Ruby et Python.
Remarque) Conversion par lots de symboles spécifiques contenus dans une chaîne de caractères avec un dictionnaire
[python] Comment trier par le Nth Mth élément d'un tableau multidimensionnel
Astuces Python: Une combinaison de enumerate () et zip (), vérifiant si une chaîne peut être convertie en nombre, triant la chaîne sous forme de nombre
[Python] Enregistrez les données vidéo importées par OpenCV sous forme de fichier jpg de numéro de série
[Python] Vous pouvez enregistrer un objet dans un fichier en utilisant le module pickle.
[Python] Ne laissez que les éléments commençant par une chaîne de caractères spécifique dans le tableau
Annoncer les prévisions météorologiques (pluie, etc.) par DM dans le cadre de la fonction de bot
Ne prenez pas une instance d'une classe d'exception Python directement comme argument de la classe d'exception!
Ajouter une fonction pour indiquer la météo d'aujourd'hui au bot slack (fabriqué par python)
Analyser une chaîne JSON écrite dans un fichier en Python
Comment convertir / restaurer une chaîne avec [] en python
[Python] Comment développer des variables dans une chaîne de caractères
#Une fonction qui renvoie le code de caractère d'une chaîne de caractères
Lisez le fichier xml en vous référant au didacticiel Python
Afficher le résultat de sortie de sklearn.metrics.classification_report sous forme de fichier CSV
Note Python: Le mystère de l'attribution d'une variable à une variable
J'ai essayé de résumer les opérations de chaîne de Python
[Python] Si vous créez un fichier avec le même nom que le module à importer, une erreur d'attribut se produira.
Django super introduction par les débutants Python! Partie 6 J'ai essayé d'implémenter la fonction de connexion
Crache une liste de noms de fichiers, de dates de dernière modification et de codes de caractères en python3
Obtenir la valeur d'une clé spécifique jusqu'à l'index spécifié de la liste de dictionnaires en Python
Ce qui semble être un modèle pour la partie d'entrée standard du pro de la concurrence en python3
Python> __init __. Py> Requis pour gérer le répertoire spécifié en tant que package (un fichier vide est acceptable)
Lorsqu'une chaîne de caractères d'une certaine série se trouve dans la clé du dictionnaire, la chaîne de caractères est convertie en valeur du dictionnaire.
Découvrez la largeur apparente d'une chaîne en python
Comment changer le fichier de configuration pour qu'il soit lu par Python
Comment mélanger une partie de la liste Python (au hasard.shuffle)
Changer la destination de sortie standard en un fichier en Python
Obtenez le nombre d'éléments spécifiques dans la liste python