2013-08-17 10 views
5

qualcosa in cui i nomi dei file hanno numeri 1-32 e voglio aprirli in ordine in un ciclo come:Come posso aprire file in python con variabile come parte del nome file?

i = 1 
while i < 32: 
filename = "C:\\Documents and Settings\\file[i].txt" 
f = open(filename, 'r') 
text = f.read() 
f.close() 

ma questo cerca il file "file [i] .txt" al posto di file1.txt , file2.txt e così via. come faccio a fare in modo che la variabile diventi una variabile tra virgolette doppie? e sì, lo so che non è rientrato, per favore non pensare che io sia così stupido.

penso che questo potrebbe funzionare: costruire il nome del file, proprio come ci si costruisce qualsiasi altra stringa che contiene una variabile:

filename = "C:\\Documents and Settings\\file" + str(i) + ".txt" 

o se avete bisogno di più opzioni per la formattazione del numero:

filename = "C:\\Documents and Settings\\file%d.txt" % i 
+0

Sembra che tu risposto alla tua domanda. – lurker

risposta

3

In primo luogo, modificare il ciclo di while i <= 32 o escluderai il file con 32 nel suo nome. La seconda opzione filename = "C:\\Documents and Settings\\file%d.txt" % i dovrebbe funzionare.

Se i numeri nei file sono 0 imbottito, come 'file01.txt', 'file02.txt', è possibile utilizzare %.2d invece di pianura vecchio% d

+0

Se i file sono riempiti a 0, possiamo anche fare come filename = "C: \\ Documents and Settings \\ file0% d.txt"% i. Penso che questo dovrebbe funzionare anche –

+1

Non farlo. Ciò presuppone che ci sia uno 0 prima di ogni numero compreso tra 1 e 32.% .2d aggiungerà 0 se c'è un solo numero. Per ogni numero compreso tra 10 e 32, lascerà i numeri come sono. –

+0

Se i file hanno quattro numeri interi alla fine, possiamo anche fare come filename = "C: \\ Documents and Settings \\ file% .4d.txt"% i. Penso che questo dovrebbe funzionare anche Come il nome del file è file1234. –

3

Hai già fornito una risposta. Btw, utilizzare with contesto responsabile invece di chiamare manualmente close():

i = 1 
while i < 32: 
    filename = "C:\\Documents and Settings\\file%d.txt" % i 
    with open(filename, 'r') as f: 
     print(f.read()) 
1

Sì, le opzioni hai dato avrebbe funzionato, perché non provarlo?

filename = "C:\\Documents and Settings\\file" + str(i) + ".txt" 

o

filename = "C:\\Documents and Settings\\file%d.txt" % i 
Problemi correlati