2012-06-22 13 views
7

estoy generando algunos números (digamos, num) y escribir los números de archivo de salida usando outf.write(num).
Pero compilador está lanzando un error:escribir valores enteros en un archivo utilizando out.write()

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

¿Cómo puedo resolver este problema?

+2

a cabo .write (str (num)) – joaquin

+3

¡Aprenda a leer los mensajes de error! "El argumento debe ser una cadena, no int" –

+1

¿Publicarías la declaración de outf? – octopusgrabbus

Respuesta

15

write() sólo toma un solo argumento cadena, por lo que podría hacer esto:

outf.write(str(num)) 

o

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

También tenga en cuenta que write no va a añadir una nueva línea a la salida por lo que si lo necesita, tendrá que proporcionarlo usted mismo.

Aparte:

Utilizando el formato de cadenas que le dará más control sobre su producción, por lo que por ejemplo se podría escribir (ambos son equivalentes):

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

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

de conseguir tres espacios, con ceros para el valor de número entero seguido de un salto de línea:

007 
012 

format() w estar cerca por un tiempo largo, entonces vale la pena aprender/saber.

+0

¿'format()' no requiere un parámetro tuple? – JAB

+0

+1 para la mejora continua – joaquin

+0

No se preocupe, me confundí. Es el uso de '%' que requiere una tupla para más de un parámetro, no 'format()'. – JAB

2

cualquiera de ellos debe trabajar

outf.write("%s" % num) 

outf.write(str(num)) 

print >> outf, num 
+0

Y dos de estos están en desuso. –

+0

@BlaXpirit Un año y medio, porque el formato% va a estar aquí por mucho tiempo – joaquin

0
i = Your_int_value 

valor de bytes de escritura así por ejemplo:

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

Dependen de ustedes int tamaño de valor y el orden de los bits su prefiere

Cuestiones relacionadas