2010-10-15 3 views
30

Voglio essere in grado di generare un certo numero di file di testo con i nomi fileX.txt dove X è qualche intero:Casting un int in una stringa in 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') 

Qualcun altro sa come fare il nomefile = "ME" + I parte quindi ottengo una lista di file con i nomi: "ME0.txt", "ME1.txt", "ME2.txt", ed ecc.

+2

Python è (più) fortemente tipizzato rispetto a linguaggi come Perl e Rexx, e non eseguirà il tipo implicito conve rsions. –

risposta

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

Si prega di leggere la documentazione Python: http://docs.python.org/

+14

Se vogliamo essere cinici, "leggi il messaggio di errore e pensa per qualche secondo" –

19

Per versioni Python precedenti alla 2.6, utilizzare il string formatting operator %:

filename = "ME%d.txt" % i 

Per 2.6 e successivamente, utilizzare il metodo str.format():

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

Anche se il primo esempio funziona ancora in 2.6, il secondo è preferito.

Se si dispone di più di 10 file di chiamare questo modo, si potrebbe desiderare di aggiungere zeri iniziali in modo che i file sono ordinate correttamente in elenchi di directory:

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

Questo produrrà i nomi di file come ME00.txt a ME99.txt . Per ulteriori cifre, sostituire lo 2 negli esempi con un numero più alto (ad esempio, ME{0:03d}.txt).

5

O:

"ME" + str(i) 

Oppure:

"ME%d" % i 

Il secondo è di solito preferito, soprattutto se si vuole costruire una stringa da diversi gettoni.

4

È possibile utilizzare str() per lanciarlo, o formattatori:

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

Qui risposta per il codice nel suo complesso:

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()