Verwenden einer Textdatei als modifizierte "Schablone" für andere Textdateien mit Formularen

378
einpoklum

(Umformulierung der Frage zur besseren Übersicht.)

Angenommen, ich habe 1000 Textdateien. Jede Datei ist eine Textform mit festen Feldbeschreibungen und Kopfzeilen, die Daten sind jedoch unterschiedlich. Zum Beispiel, Datei 1:

The Foo Factory Date: 2015-10-02  Order Details ------------------------- Order ID: [ 1 ] Amount: [ 1 ] Order Price: [ 12.34 ]  Have a nice day. 

und Datei 2:

The Foo Factory Date: 2016-01-11  Order Details ------------------------- Order ID: [ 7 ] Amount: [ 17 ] Order Price: [ 543.21 ]  Have a nice day. 

usw. Nehmen wir an, ich habe die Feldbeschreibungen ins Französische übersetzt. und ich habe die Werte gelöscht. So jetzt habe ich:

L'usine Foo Date:   Détails de commande ------------------------- Nm.du Commande: [ ] Montant: [ ] Prix du Commande: [ ]  Bonne journée. 

Ich spreche nicht wirklich Französisch, also ignoriere hier alle Fehler. Auf jeden Fall sind die Positionen aller Felder identisch, der Text außerhalb des Feldwerts ist jedoch unterschiedlich. Ich möchte diesen Ersatz auf alle Dateien anwenden. Wie kann ich das erreichen?

0
Was ist dein Endziel? user193661 vor 9 Jahren 1
@Clearquestionwithexamples: Ändern der Feldbeschreibungen für eine textuelle "Formularausgabe"; und ich werde schließlich viele davon haben. Auch dein Nick ist ziemlich verwirrend. Ich will nicht unhöflich sein, aber - vielleicht sollten Sie darüber nachdenken, es zu ändern. einpoklum vor 9 Jahren 0
Können Sie einen Vorher-Nachher-Screenshot oder einen Codeblock als Beispiel verwenden? user193661 vor 9 Jahren 0
Sie haben den Text "Vorlage" ersetzt und die "dateispezifischen" Daten "gelöscht", die sich so anfühlen, als wäre die Datei jetzt leer. user193661 vor 9 Jahren 0
Kennen Sie Regex? user193661 vor 9 Jahren 0
@Clearquestionwithexamples: Ja, aber ein Regex gilt nicht für Paare von Dateien / Streams. Siehe auch meine Bearbeitung bezüglich Ihres vorherigen Kommentars. einpoklum vor 9 Jahren 0
Ich bezweifle, dass jemand Ihre Frage verstehen wird. Geben Sie einfach einen Hintergrund Ihrer Situation und ein Beispiel für die Operation, die Sie ausführen möchten. user193661 vor 9 Jahren 0
@Clearquestionwithexamples: Wie wäre es jetzt? einpoklum vor 9 Jahren 0
Es ist jetzt leicht zu verstehen. Mein Hilfsmittel für solche Dinge ist Python. user193661 vor 9 Jahren 0
Möchten Sie ein Skript dafür? Ich habe schon angefangen zu schreiben. user193661 vor 9 Jahren 0
@Clearquestionwithexamples: Ich ging eigentlich davon aus, dass es ein Tool gibt, das dies tut. Offensichtlich könnte so etwas wie ein Perl-Skript, das aus zwei Dateien liest, dies tun. Ein Befehl, der Zeichen aus zwei Dateien verschachtelt, würde dies fast mit einem einzigen einfachen Regex zulassen (außer, dass die neuen Feldbeschreibungen manchmal Leerzeichen enthalten). einpoklum vor 9 Jahren 0
@Clearquestionwithexamples: Ja gibt es. Außerdem ist es sowieso schöner :-) einpoklum vor 9 Jahren 0
Was ist das Betriebssystem? user193661 vor 9 Jahren 0
Ich meinte _Winmerge_ tut das. user193661 vor 9 Jahren 0
@Clearquestionwithexamples: Komm schon, "was ist das OS"? Ich bin ein bisschen beleidigt ... klingt ich für dich wie ein Windows-Typ? :-) einpoklum vor 9 Jahren 0

1 Antwort auf die Frage

0
user193661

Sie haben die Formatierungskarte bereits erstellt, sodass die einzige verbleibende Arbeit darin besteht, reguläre Ausdrücke zu ersetzen. Das Erstellen der Karte ist schwieriger, insbesondere für größere, kompliziertere Texte. Ich verwende dafür Sublime Text . Der Anwendungsfall und weitere Informationen sind hier jedoch nicht klar, Sie sollten ihn an softwarerecs.SE bringen, wenn es wichtig ist. Ich füge sowieso eine Python-Version bei:

 

# -*- coding: utf-8 -*- import os  SOURCE_DIRECTORY = '' DEST_DIRECTORY = ''  replacements = ["L'usine Foo ", "Détails de commande", "Nm.du Commande: ", "Montant: ", "Prix du Commande: ", "Bonne journée."]  samples = ["The Foo Factory ", "Order Details", "Order ID: ", "Amount: ", "Order Price: ", "Have a nice day."]  for filename in os.listdir(SOURCE_DIRECTORY): with open(os.path.join(SOURCE_DIRECTORY, filename), 'r') as nctn: text = nctn.read() for i, val in enumerate(samples): text = text.replace(val, replacements[i]) with open(os.path.join(DEST_DIRECTORY, filename), 'w') as nctn: nctn.write(text) 
Was ich damit meine, ist, dass, wenn Sie eine sehr große Datei haben, die Feststellung, welche Operationen durchgeführt werden müssen, mühsam ist. Stellen Sie sich vor, Sie müssen manuell tausend Zeilen Schlüsselwörter auswählen, um Ihr Mapping zu erstellen. user193661 vor 9 Jahren 0
Oh nein, nein, nein, ich möchte kein benutzerdefiniertes Skript schreiben, das das Muster enthält. Ich brauche etwas, das ein beliebiges Paar (neue Musterdatei, Arbeitsdatei) benötigt und die Arbeit erledigt. einpoklum vor 9 Jahren 0