Notepad ++ - Entfernen der ersten Spalte in einer durch Kommas getrennten Datei


14

Ich habe eine große CSV- Datei, die ich zum Entfernen der ersten Datenspalte benötige. Ich kann es nicht in Excel öffnen, da Excel einige der Werte in den Spalten in wissenschaftliche Zahlen konvertiert.

Ich benutze Notepad ++ und versuche, die erste Spalte aus der Datei EXE zu kopieren.

1,Value1,value2,value3,value4,value5
3445,Value1,value2,value3,value4,value5
12345,Value1,value2,value3,value4,value5
1234,Value1,value2,value3,value4,value5
11,Value1,value2,value3,value4,value5

aussehen

Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5

Antworten:


13

Das Suchen und Ersetzen in Notepad ++ unterstützt reguläre Ausdrücke (reguläre Ausdrücke), die einfach dafür verwendet werden können.

Verwenden Sie den folgenden regulären Ausdruck, um nach Folgendem zu suchen:

^[^,]+,(.+)

Dies entspricht dem Zeilenanfang, gefolgt von möglichst vielen Zeichen, die kein Komma sind, gefolgt von einem Komma, gefolgt vom Rest der Zeile. Der Rest der Zeile wird als erstes Submatch gruppiert.

Global ersetzen mit diesem:

\1

Dies bezeichnet die erste Teilübereinstimmung (Rest der Zeile). Dabei wird jede Zeile nach der ersten Spalte und dem Komma durch alles ersetzt.

Nachdem ich die oben beschriebene Methode in einem einzigen globalen Ersetzungsschritt gefunden hatte (und meine Antwort entsprechend aktualisiert hatte), stellte ich fest, dass diese Antwort im Wesentlichen identisch ist, aber auch eine umfassende Erläuterung des verwendeten regulären Ausdrucks enthält.


Hinweis: Der kürzere reguläre Ausdruck ^[^,]+,kann nicht für das globale Ersetzen durch einen leeren String verwendet werden, da Notepad ++ dann alle Spalten mit Ausnahme des letzten ersetzt: Nach dem Ersetzen der ersten Spalte wird die zweite Spalte (die jetzt die erste ist und genau dem regulären Ausdruck entspricht) ersetzt ersetzt werden, dann die dritte und so weiter. Der kürzere reguläre Ausdruck funktioniert jedoch perfekt mit anderen Editoren (z. B. mit PSPad oder vim ).


Dies ist der Weg hierher. Wenn das OP bereits N ++ hat, ist dies der schnellste Weg. Ich mache das oft mit PSPad (was das übrigens auf einmal machen könnte). Überprüfen Sie auch, wie der Regex funktioniert: rubular.com/r/OiehkBT0vA
simbabque

Notepad ++ verarbeitet die Eingabe nicht zeilenweise, sondern zeichenweise. Das hat einige nette Vorteile (wie Mehrlinienmuster).
Dennis

+1 für die Bearbeitung. Leider lautet Ihre Antwort jetzt Community-Wiki.
Dennis

@Dennis Ja, ich habe zu oft bearbeitet, da mir das Limit für 10 Bearbeitungen nicht bekannt war.
Speakr

Warum nicht ^[^,]+,und durch leer ersetzen?
Knittl

10

Drücken Sie Ctrl+ Hund führen Sie das folgende Ersetzen durch:

Find what:          .*?,(.*)
Replace with:       \1
Wrap around:        checked
Regular expression: selected
. matches newline:  unchecked

Drücken Sie jetzt Alt+ A, um alle Vorkommen zu ersetzen.

Wie es funktioniert

  • Der reguläre Ausdruck .*?,(.*) entspricht einer ganzen Zeile:

    • .*?, Stimmt mit allem vor dem ersten Komma überein, einschließlich dem Komma selbst.

      .*bedeutet eine beliebige Anzahl von Vorkommen eines Zeichens, und das Fragezeichen macht den Quantifizierer faul , dh es entspricht so wenig Zeichen wie möglich.

    • (.*) Stimmt mit allem nach dem ersten Komma überein.

      Das Einschließen .*in Klammern wandelt es in ein Untermuster um, so dass auf den Mast im Ersetzungsfeld zugegriffen werden kann.

  • \1repräsentiert das erste Submatch (Match for (.*)).

    Infolgedessen ersetzt Notepad ++ die Zeile durch alles, was auf das erste Komma folgt.


Sie war gerade die gleiche Idee nach , dass zu bemerken ^[^,]+,global mit einem leeren String wird nicht funktionieren in Notepad ++ ersetzt. (+1)
speakr

6

In Windows können Sie dies wie folgt tun.

for /F "tokens=2,3,4,5,6 delims=," %i in (Input.csv) do @echo %i,%j,%k,%l,%m  >> output.csv

Ich nahm an, dass Sie nur 6 Spalten haben. Wenn Sie mehr Spalten haben, experimentieren Sie mit * im Token-Feld. Idee wird von Windows für Befehl genommen


2
Verwenden Sie für eine beliebige Anzahl von Spalten for /F "tokens=1* delims=," %i in (Input.csv) do @echo %j >> output.csv
Folgendes

3

Angenommen , Sie haben ein Linux - System oder ein Unix - Stil Umgebung (I wie Gow , oder Sie können die Dienstprogramme aus snarf unixutils ) Ich glaube , läuft die Datei durch cut -d , -f2-6den Trick tun sollten - es sollte, wenn ich mich richtig erinnere den Trick - -dsetzt die Trennzeichen und f2-6druckt das zweite bis sechste Zeichen aus.

cat input.csv | cut -d , -f2-6 > output.csvwürde den Trick machen, Eingabedatei zu nehmen und eine Ausgabedatei rauszuschmeißen. Es ist kein Notizblock, aber es ist schnell und wirklich einfach.


Danke, ich habe gerade auf den Link geklickt und eine 403-Fehlermeldung erhalten?
MikeD

Beide Links funktionieren für mich - was seltsam ist. Normalerweise finde ich Gow, indem ich danach google - es ist auf einem Github-Repo von Bmatzelle. Cygwin könnte auch eine Option sein, aber es ist ein Overkill für diese Art von Dingen
Journeyman Geek

2

Sie sollten in der Lage sein, die CSV-Datei in Excel zu laden und Zahlen als Text zu behandeln (sodass sie nicht in wissenschaftliche Zahlen konvertiert werden kann).

  1. Öffnen Sie Excel
  2. Registerkarte "Daten"
  3. Aus Text
  4. Wählen Sie Getrennt
  5. Andere wählen: ","
  6. Für alle Spalten markieren Sie diese im Fenster Datenvorschau und wählen Sie Text
  7. Entfernen Sie Ihre Säule
  8. Als CSV speichern

Beim Bearbeiten und Speichern von CSV-Dateien in Excel werden häufig Zahlen wie EAN-Codes und Gleitkommazahlen im US-Stil in europäischem Excel getrennt. Selbst wenn Sie beim Importieren alles einrichten, frisst es einige Dinge auf. Ich kann es nicht empfehlen, obwohl es wahrscheinlich funktionieren würde. In einer produktiven Umgebung rate ich davon ab.
Simbabque

Das hat super geklappt! Vielen Dank
MikeD

@simbabque Ich würde sagen, das ist etwas unfair. Ich habe es erfolgreich in Produktionsumgebungen für große Datenmengen verwendet, die manipuliert werden mussten - zugegebenermaßen war es zuweilen ein Albtraum. Excel hat die Angewohnheit, Daten auf unerwartete Weise zu ändern, aber ich würde nicht sagen, dass dieses Risiko besonders groß war als bei anderen Ansätzen.
James Wood

Ich benutze es gelegentlich auch, aber meistens mache ich es nicht gerne. Es ist oft viel schneller, einen Texteditor zu verwenden, der das Suchen und Ersetzen mit regulären Ausdrücken unterstützt, wenn man weiß, wie man damit umgeht. Keine Beleidigung, denn Ihre Antwort war klar und präzise.
Simbabque

Ich war nicht beleidigt: D
James Wood

1

Notepad ++ verfügt über eine integrierte Spaltenbearbeitung und den Befehl "Anordnen nach (,)" (TextFX-Plug-in). Dies bietet eine grafische Point-and-Click-Lösung, die wahrscheinlich zum ersten Mal richtig ist. Auf diese Weise müssen keine regulären Ausdrücke oder Shell-Programme verwendet werden. Beide erfordern in der Regel ein Debugging, bis sie genau das tun, was Sie wollen, und nichts mehr.

Ausgangspunkt : CSV-Datei mit fehlausgerichteten Spalten, daher nicht einfach nach Spalten zu bearbeiten ...

    1,Value1,value2,value3,value4,value5
    3445,Value1,value2,value3,value4,value5
    12345,Value1,value2,value3,value4,value5
    1234,Value1,value2,value3,value4,value5
    11,Value1,value2,value3,value4,value5
    ...

Verfahren:

  1. Wählen Sie die gewünschten Zeilen aus - möglicherweise die gesamte Datei.

  2. Verwenden Sie den Menübefehl TextFX> TextFX-Bearbeitung> Mehrere Zeilen nach Komma ausrichten (,). Dies richtet alle Zeilen nach Spalten aus und erleichtert die Spaltenbearbeitung.

    1    ,Value1,value2,value3,value4,value5
    3445 ,Value1,value2,value3,value4,value5
    12345,Value1,value2,value3,value4,value5
    1234 ,Value1,value2,value3,value4,value5
    11   ,Value1,value2,value3,value4,value5
    
  3. Geben Sie Spaltenmodus in der Spalte nach dem ersten Komma (,) Für eine kleine Anzahl von Zeilen, verwenden Sie die Tastaturbefehle: Alt + Shift + Downarrow.
    Wenn Sie mit vielen Zeilen arbeiten müssen (große Datei), klicken Sie mit gedrückter Alt-Taste auf die gewünschte Spalte der ersten Zeile, gehen Sie dann zur letzten Zeile der Datei und drücken Sie bei gedrückter Alt-Umschalttaste die gleiche Spaltenposition. Dies aktiviert den Spaltenmodus für die GESAMTE Datei - Sie sollten eine vertikale Linie hinter allen Kommas sehen.

  4. Löschen in der Spalte Modus entfernt eine ganze Spalte von Zeichen. Sie können also alles vor dem ersten Komma in allen Zeilen auf einmal löschen, um Folgendes zu erhalten:

    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    Value1,value2,value3,value4,value5
    

Erledigt!

Bemerkung zu dieser Lösung im Vergleich zu den verschiedenen anderen bisher vorgeschlagenen:

Die Bearbeitung im Spaltenmodus ist sehr leistungsfähig und kann in Kombination mit den TextFX-Plug-in-Optionen schnell und einfach auf eine Vielzahl von Situationen angewendet werden.

Wenn Sie beispielsweise die 2. Spalte oder die N-te Spalte schnell löschen möchten, funktioniert dieser Ansatz nahezu unverändert.

Reguläre Ausdrücke und Shell-Skripte erreichen das Ziel zwar, aber bei komplizierten Problemen müssen Sie mehr Zeit aufwenden, um die Syntax zu "entstören".

Die vielseitige integrierte Funktionalität von Notepad ++ ist eine der Hauptstärken: Sie erhalten einiges an Leistung, ohne auf "Programmieren" zurückgreifen zu müssen.


0

Wenn Sie mit dem Python-Konsolen-Plugin für Notepad ++ vertraut sind , kann ich Ihnen eine andere Methode empfehlen. Sie müssen Ihren Text in das Notepad ++ - Dokument einfügen und das nächste Skript in der Konsole ausführen:

res = []
data = editor.getText().split('\r\n')
for i in data:
    res.append(i.split(',')[1:])

for i in res:
    editor.addText(', '.join(i)+'\r\n')

Dieses Skript hat den Ergebnistext zu Ihrem aktuellen Notepad ++ - Dokument hinzugefügt.


-1

Ausführen vim(im Befehlsmodus, wenn nicht Escape drücken).

Geben Sie den folgenden Befehl ein, um die Aktion zum Entfernen der ersten Spalte dem qSchlüssel zuzuordnen :

:map q 0df,j0

Was bedeutet:

  • 0 - an den Zeilenanfang gehen
  • df,- d elete alles bis , Zeichen (einschließlich Komma),
  • j - eine Zeile nach unten gehen
  • 0 - an den Zeilenanfang gehen

Wenden Sie dann diese Aktion auf alle Zeilen an:

:0,$ normal q

Das heißt, führen Sie die der Taste zugewiesene Aktion qvon der ersten (0) bis zur letzten ($) Zeile aus.


Warum nicht einfach ein einziges globales Ersetzen mit :%s/^[^,]\+,//g?
Speakr

Sie können auch sagen, dass dieser Code einfach zu verwenden und zu verstehen ist und nicht zu regulären Ausdrücken. Normalerweise bin ich immer verwirrt, welchem ​​Zeichen ich mich entziehen muss.
Kenorb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.