"Backspace" über das letzte in die Datei geschriebene Zeichen

8

Ich habe eine Python-Anwendung, die eine SQL-Datei ausgibt:

%Vor%

Dies geschieht nicht in einer for -Schleife, es wird geschrieben, wenn Daten verfügbar werden. Gibt es eine Möglichkeit, das letzte Kommazeichen zurückzusetzen, wenn die Anwendung ausgeführt wird, und es durch ein Semikolon zu ersetzen? Ich bin mir sicher, dass ich eine Workaround erfinden könnte, indem ich das Komma vor dem Zeilenumbruch ausgeben und ein globales Bool verwenden würde, um festzustellen, ob ein bestimmter "Schreibvorgang" der erste Schreibvorgang ist. Ich denke jedoch, dass die Anwendung viel sauberer wäre, wenn ich einfach darüber "zurückgehen" könnte. Natürlich ist es einfacher, Python zu sein!

Beachten Sie, dass es in diesem Anwendungsfall keine praktikable Lösung ist, jede insert -Wertlinie in einer Liste zu haben und dann die Liste zu implodieren.

    
dotancohen 10.06.2013, 11:53
quelle

4 Antworten

8

Verwenden Sie suchen, um den Cursor ein Byte (Zeichen) rückwärts zu bewegen, dann schreiben Sie das neue Zeichen:

%Vor%

Dies ist die einfachste Änderung, wenn Sie Ihren aktuellen Code beibehalten ("Arbeitscode" schlägt "idealen Code"), aber es wäre besser, die Situation zu vermeiden.

    
nOw2 10.06.2013, 12:03
quelle
4

Wie wäre es, die Kommata vor dem Hinzufügen der neuen Zeile hinzuzufügen?

%Vor%

Sie haben das in Ihrer Frage erwähnt - ich denke, das ist für einen Betreuer viel klarer als nach Kommas zu suchen und sie zu überschreiben.

EDIT: Da die obige Lösung einen globalen Boolean in Ihrem Code erfordern würde (was nicht wünschenswert ist), könnten Sie stattdessen das Schreibverhalten der Datei in eine Hilfsklasse einbinden:

%Vor%

Dadurch wird die gesamte Logik der SQL-Notation in eine einzige Klasse gekapselt, wodurch der Code lesbar bleibt und gleichzeitig der Code für den Aufrufer vereinfacht wird.

    
seanhodges 10.06.2013 12:04
quelle
0

Öffnen Sie die Datei, um sie als Binärdatei zu schreiben: "wb" anstelle von "w".

    
duffymo 10.06.2013 11:57
quelle
0

Verwenden Sie Generatoren, z. B .:

%Vor%

Für Hardcore-Iteratoren sollten Sie damit beginnen:

%Vor%

Wenn Ihre Daten eine imperative API verwenden, ist diese nicht iterierbar, send() Ihre Daten an den Generator:

%Vor%     
Dima Tisnek 10.06.2013 12:26
quelle

Tags und Links