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.
Une brève description du code Python
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
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.
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.
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