2012-06-22 9 views
7

ich einige Zahlen bin zu erzeugen (können sagen, num) und die Zahlen Ausgabedatei zu schreiben mit outf.write(num).
Aber Compiler einen Fehler wirft:Schreiben ganzzahlige Werte in einer Datei out.write mit()

"outf.write(num) 
TypeError: argument 1 must be string or read-only character buffer, not int". 

Wie kann ich dieses Problem lösen?

+2

.write (str (num)) – joaquin

+3

Lesen Sie die Fehlermeldungen! "Das Argument muss eine Zeichenkette sein, nicht int." –

+1

Würden Sie die Deklaration von outf posten? – octopusgrabbus

Antwort

15

write() dauert nur ein Einzelsaite Argument, so können Sie dies tun:

outf.write(str(num)) 

oder

outf.write('{}'.format(num)) # more "modern" 
outf.write('%d' % num)  # deprecated mostly 

auch, dass write nicht eine neue Zeile zu Ihrer Ausgabe Prüfhinweis so, wenn Sie Brauche es, du musst es selbst liefern.

Neben:

Zeichenfolge Formatierung verwenden würden Sie mehr Kontrolle über Ihre Ausgabe geben, so zum Beispiel Sie (diese beiden sind äquivalent) schreiben könnte:

num = 7 
outf.write('{:03d}\n'.format(num)) 

num = 12 
outf.write('%03d\n' % num)   

zu bekommen drei Räume, mit führenden Nullen für den ganzzahligen Wert durch eine neue Zeile folgt:

007 
012 

format() w Ich bin schon lange nicht mehr da, also lohnt es sich zu lernen/zu wissen.

+0

Benötigt 'format()' keinen Tupel-Parameter? – JAB

+0

+1 für kontinuierliche Verbesserung – joaquin

+0

Keine Sorge, ich habe verwirrt. Es ist die Verwendung von '%', die ein Tupel für mehr als einen Parameter benötigt, nicht 'format()'. – JAB

2

davon jeder sollte zum Beispiel so

outf.write("%s" % num) 

outf.write(str(num)) 

print >> outf, num 
+0

Und zwei davon sind veraltet. –

+0

@BlaXpirit Eineinhalb, weil% Format wird hier für lange sein – joaquin

0
i = Your_int_value 

schreiben Bytes Wert arbeiten: aus

the_file.write(i.to_bytes(2,"little")) 

Abhängig von Ihnen Wert Größe int und die Bit-Reihenfolge Ihre bevorzugen

Verwandte Themen