2010-10-15 9 views
30

Quiero ser capaz de generar una serie de archivos de texto con los nombres fileX.txt donde X es un entero:casting un int a una cadena en Python

for i in range(key): 
    filename = "ME" + i + ".txt" //Error here! Can't concat a string and int 
    filenum = filename 
    filenum = open(filename , 'w') 

¿Alguien más sabe cómo hacer el filename = "ME" + i part así que obtengo una lista de archivos con los nombres: "ME0.txt", "ME1.txt", "ME2.txt", y etc.

+2

Python es (más) fuertemente tipado que los lenguajes como Perl y Rexx, y no hará el tipo implícito conve riones. –

Respuesta

69
x = 1 
y = "foo" + str(x) 

Por favor lea la documentación de Python: http://docs.python.org/

+14

Si vamos a ser cínicos, "por favor lea el mensaje de error y piense por unos segundos" –

19

Para las versiones de Python anteriores a la 2.6, utilice el string formatting operator %:

filename = "ME%d.txt" % i 

Para 2.6 y después, utilizar el str.format() método:

filename = "ME{0}.txt".format(i) 

Aunque el primer ejemplo todavía funciona en 2.6, se prefiere la segunda.

Si usted tiene más de 10 archivos para nombrar esta manera, es posible que desee añadir ceros a la izquierda para que los archivos se ordenan correctamente en los listados de directorios:

filename = "ME%02d.txt" % i 
filename = "ME{0:02d}.txt".format(i) 

Esto producirá nombres de archivo como ME00.txt a ME99.txt . Para obtener más dígitos, reemplace el 2 en los ejemplos con un número más alto (por ejemplo, ME{0:03d}.txt).

5

O bien:

"ME" + str(i) 

O:

"ME%d" % i 

El segundo es generalmente preferido, sobre todo si se quiere construir una cadena de varias fichas.

4

Usted puede utilizar str() para su emisión, o formateadores:

"ME%d.txt" % (num,) 
2

Aquí respuesta para su código en su conjunto:

key =10 

files = ("ME%i.txt" % i for i in range(key)) 

#opening 
files = [ open(filename, 'w') for filename in files] 

# processing 
for i, file in zip(range(key),files): 
    file.write(str(i)) 
# closing 
for openfile in files: 
    openfile.close()