Jemand in Python unter https://qiita.com/ozaki25/items/33a57ad7eea55822c764. .. .. Weil es eine Geschichte war Ich habe es für einen Moment in Slack geschrieben, aber ich habe eine Geschichte mit der Aufschrift "Explanation ~" (wahrscheinlich) und ich werde es schnell schreiben.
Der Schreibstil ist mein eigenes Hobby, also gibt es einen besseren Weg, ihn zu schreiben! Lass es mich wissen, bitte.
Eine kurze Beschreibung des Python-Codes
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 ]
Aus irgendeinem Grund wurde der in Slack eingefügte Code in seltsamen Code konvertiert. : Nerd: Bitte sehen Sie diesen Code richtig.
Infolgedessen geschah dies, weil der Eintragseigentümer auf "einem Liner" bestand. .. Natürlich hat Python auch eine CLI, damit ich das machen kann, aber ich verstehe nicht warum, also habe ich hier angehalten.
Datenerstellung mit einem Liner? Es scheint also ein wenig übel zu sein.
!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
Nun zur Erklärung.
import os
import re
from glob import glob
Die Umbenennung der Datei lautet os.rename Regulärer Ausdruck für das Ersetzen von Dateinamen Ich benutzte.
Ich habe glob verwendet, um das Dateilistenobjekt abzurufen. Ich habe in diesen Tagen eine ähnliche Pfadlib verwendet, ich verwende kein Join mehr.
p_file = glob("./*.csv")
Verwenden Sie glob, um das Dateilistenobjekt abzurufen. Ich wollte keine zusätzlichen Dateien als Ziel festlegen, aber da glob die Nummernübereinstimmung nicht unterstützt, ist es vorerst keine gute Idee, alle CSV-Erweiterungen zu erhalten. Ich war ein bisschen süchtig danach.
_ = [ os.rename(file, re.sub(r'^.*_([0-9]{1,3}).*(\.csv)$', r'\1\2', file)) for file in p_file ]
Ja, ich weiß es nicht, wenn ich nicht daran gewöhnt bin. Ich habe die Einschlussnotation verwendet, um die Anzahl der Zeilen zu reduzieren (obwohl es verschiedene Vorteile gibt).
Es sieht so aus, wenn Sie es ohne Einschlüsse schreiben.
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)
Es macht wenig Sinn, das Ergebnis _ zuzuweisen. Wenn Sie es nicht angeben, ist das Konsolenprotokoll nicht schön. Daher ist es eine sorgfältige Maßnahme, um zu verhindern, dass es angezeigt wird.
[None, None, None, None, None, None, None, None, None, None]
Was ist es. .. .. Dies.
Der letzte ist ein regulärer Ausdruck Das 1- bis 3-stellige Teil und das Erweiterungsteil werden extrahiert und zusammengebaut (Standard-Match + Ersatz). Es kann ein wenig süß sein, mit regulären Ausdrücken einzugrenzen.
r'^.*_([0-9]{1,3}).*(\.csv)$' ⇛ r'\1\2'
Es wird empfohlen, r (Zeilenzeichenfolgenausdruck) zu verwenden, da es ohne zusätzliches Escapezeichen ausgedrückt werden kann.
Ich mache mir Sorgen um die Leseberechtigung der Datei oder so, aber diesmal lasse ich sie weg. Wenn Sie jedoch unbeaufsichtigt arbeiten, ist es besser, grundlegende Berechtigungen zum Überprüfen / Lesen / Schreiben der Existenz einzuschließen.
Es kann mit os.rename fehlschlagen, daher sollten Sie auch ~ außer versuchen. Dieses Mal habe ich mich auf Schnelligkeit konzentriert und sie übersprungen (Entschuldigung: umbrella2 :)
In dem im Unternehmen verwendeten Code wird die CSV-Datei gelesen und in den DataFrame importiert. Es wird jedoch eine Klasse erstellt und ausgeführt, die die Existenzprüfung und die Lese- / Schreibprüfung umschließt.
Ich wurde kürzlich versetzt und da ich das ganze Bild des Projekts sehen kann, für das ich verantwortlich bin, fühle ich mich unter Druck gesetzt. .. .. Ich bin erleichtert, Python-Code zu schreiben (nur ein Scherz: heat_smile :).