Frage

Ich bin auf der Suche nach der besten Lösung für benutzerdefinierte Datei für unsere Unternehmen Importroutinen Parsen. Ich mag im Grunde ein Dateiformat in ein Standarddateiformat und eine Routine ändern, dass die Einfuhren, die Daten in die Datenbank. Ich muß in die Lage, benutzerdefinierte Skripts für jeden Client, da seine schwer zu erstellen, die Kunden zu bekommen mit einem Standard oder Vorlagenformat entsprechen. Ich habe in Powershell und Eisen Python sehe dies so weit zu tun, aber ich bin nicht sicher, dass dies der Weg ist, will ich gehen. Ich habe auch an einigen Werkzeugen wie Talend sah, die eine Drag & Drop-Stil Werkzeug, das nicht mir geben kann oder was ich so weit wie Flexibilität wünschen. Wir sind ein Geschäft .NET und haben benutzerdefinierten Code erstellt dies in der Vergangenheit zu tun, aber ich brauche etwas, das dann benutzerdefinierte Parsing-Funktionen Codierung erstellen schneller ist, jedes Mal, wenn wir in ein neues Dateiformat erhalten.

War es hilfreich?

Lösung

Python ist für diese Art der Sache wunderbar. Deshalb verwenden wir auch. Jeder neue Kunde Transfer ist ein neues Abenteuer und Python gibt uns die Flexibilität, um schnell reagieren zu können.


Bearbeiten . All Python-Skripte, die Dateien zu lesen ist „benutzerdefinierte Datei-Parser“. Ohne ein aktuelles Beispiel, ist es nicht sinnvoll, ein detailliertes Beispiel zu liefern.

with open( "some file", "r" ) as source:
    for line in source:
        process( line )

Das ist ungefähr alles, was es zu einem „benutzerdefinierten Datei-Parser“ ist. Wenn Sie CSV- oder XML-Dateien sind Parsen, dann hat Python-Module dafür. Wenn Sie das Parsen Fest-Format-Dateien, dann würden Sie Zeichenfolge Schneiden Operationen verwenden. Wenn Sie andere Dateien sind Parsen (X12? JSON? YAML?) Finden Sie entsprechende Parser benötigen.

Tab-Delim .

from collections import namedtuple
RecordLayout = namedtuple('RecordLayout',['field1','field2','field3',...])
def process( aLine ):
    record = RecordLayout( aLine.split('\t') )
    ...

Fixed-Layout .

from collections import namedtuple
RecordLayout = namedtuple('RecordLayout',['field1','field2','field3',...])
def process( aLine ):
    fields = ( aLine[:10], aLine[10:20], aLine[20:30], ... )
    record = RecordLayout( fields )
    ...

Andere Tipps

Je nach Komplexität und Variabilität Ihrer Arbeit sollten Sie ein ETL-Tool wie SSIS (SQL Server Integration Services) in Betracht ziehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top