2012-06-22 8 views
7

sto generando alcuni numeri (diciamo, num) e scrivere i numeri a file di output utilizzando outf.write(num).
Ma compilatore sta gettando un errore:scrittura valori interi in un file utilizzando out.write()

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

Come posso risolvere questo problema?

+2

fuori .write (str (num)) – joaquin

+3

Impara a leggere i messaggi di errore! "L'argomento deve essere una stringa, non int" –

+1

Vuoi pubblicare la dichiarazione di outf? – octopusgrabbus

risposta

15

write() richiede solo un unico argomento stringa, così si potrebbe fare questo:

outf.write(str(num)) 

o

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

anche notare che write non aggiungerà una nuova linea per la vostra uscita quindi se si ne hai bisogno dovrai fornirlo tu stesso.

parte:

utilizzando la formattazione stringa darebbe un maggiore controllo sulla vostra uscita, così per esempio si potrebbe scrivere (entrambi questi sono equivalenti):

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

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

per ottenere tre spazi, con gli zeri per il vostro valore intero seguito da un ritorno a capo:

007 
012 

format() w essere in giro per un lungo periodo, quindi vale la pena di imparare/conoscere.

+0

Non 'format()' richiede un parametro tupla? – JAB

+0

+1 per il miglioramento continuo – joaquin

+0

Non preoccuparti, mi sono confuso. È l'uso di '%' che richiede una tupla per più di un parametro, non 'format()'. – JAB

2

uno di questi dovrebbe funzionare

outf.write("%s" % num) 

outf.write(str(num)) 

print >> outf, num 
+0

E due di questi sono deprecati. –

+0

@BlaXpirit Uno e mezzo, perché il formato% sarà qui a lungo – joaquin

0
i = Your_int_value 

valore Byte scritti in questo modo, per esempio:

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

Depend di voi int dimensione del valore e l'ordine di bit il vostro preferito