Erstellen Sie eine durch Leerzeichen getrennte Datei in Python
-
13-12-2019 - |
Frage
Mit dem folgenden Code erhalte ich die richtigen Informationen für die Datei.Hier ist der Code:
filename = raw_input('What would you like to name the file? ')
import csv
data = [frames]
out = csv.writer(open(filename,"w"), delimiter=' ',quoting=csv.QUOTE_MINIMAL)
out.writerows(data)
Dadurch wird etwas generiert, das in einer Textdatei so aussieht:
"[255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0]" "[ 0 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171
171 171]"
Ich möchte, dass die Informationen so aussehen:
255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 []0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Die beiden Klammern stellen ein Zeichen dar, das auf eine neue Informationszeile hinweist.Es ist ein kleines Rechteck in meinem Texteditor und ich bin mir nicht sicher, um welches Zeichen es sich handelt.
Wie entferne ich also die Anführungszeichen und Klammern und verwende dieses andere Zeichen?
BEARBEITEN:
Ich habe versucht, den folgenden Code zu verwenden und habe die folgende Fehlermeldung erhalten:
Traceback (most recent call last):
File "(stdin)", line 1, in (module)
File "backandforth3.py", line 154, in (module)
out.write(' '.join(frame))
Type Error: sequence item 0: expect string, numpy.int32 found
Lösung
Ich gehe davon aus, dass Sie Notepad als Texteditor verwenden?Zeilenumbrüche im Unix-Stil (\n
) werden im Editor als Kästchen angezeigt, da nur Windows-Zeilenumbrüche unterstützt werden (\r\n
).Das heißt, dies sollte die erwartete Ausgabe liefern:
filename = raw_input('What would you like to name the file? ')
with open(filename, 'wb') as out:
for frame in frames:
out.write(' '.join(str(num) for num in frame))
out.write('\r\n')
Es gibt keinen Grund zum Einpacken frames
in einer anderen Liste;Unter der Annahme, dass es sich bei der Variablen um eine Liste von Zahlenlisten handelt, wie die erwartete Ausgabe vermuten lässt, sollte dies einwandfrei funktionieren.
Wenn Sie die in der Ausgabe beschriebenen „Boxen“ unbedingt benötigen, ersetzen Sie sie auch '\r\n'
mit '\n'
.
Andere Tipps
Wenn frames
ist ein Numpy-Array, das Sie verwenden könnten numpy.savetxt()
Funktion:
numpy.savetxt(filename, frames)
Um Ihr Problem zu beheben csv
Code öffnet die Datei im Binärmodus wb
Um eine Beschädigung des Zeilenendes zu vermeiden, und nicht umbrechen frames
in einer anderen Liste scheint es bereits ein 2D-Array zu sein:
import csv
with open(filename,"wb") as f:
writer = csv.writer(f, delimiter=' ', quoting=csv.QUOTE_MINIMAL)
writer.writerows(frames)