2013-08-17 10 views
5

coś gdzie nazwy plików mają numery 1-32 i chcę, aby otworzyć je w kolejności w pętli jak:Jak mogę otworzyć pliki w pythonie ze zmienną jako częścią nazwy pliku?

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

ale wygląda to na plik „plik [i] .txt” zamiast file1.txt , file2.txt i tak dalej. jak sprawić, by zmienna stała się zmienną wewnątrz podwójnego cudzysłowu? i tak, wiem, że nie jest wcięty, proszę, nie myśl, że to głupie.

myślę, że to może działać: Budowanie nazwę pliku tak jak chcesz zbudować dowolny inny ciąg znaków, który zawiera zmienną:

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

lub jeśli potrzebujesz więcej opcji formatowania numer:

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

wygląda odpowiedziałeś na swoje pytanie. – lurker

Odpowiedz

3

pierwsze, zmienić pętli while i <= 32 lub będziesz wykluczyć plik z 32 w jego imieniu. Twoja druga opcja filename = "C:\\Documents and Settings\\file%d.txt" % i powinna działać.

Jeśli numery w plikach są 0 wyściełane, jak „file01.txt”, „file02.txt”, można użyć %.2d zamiast zwykłego starego% d

+0

Jeśli pliki mają 0 wypełnień, możemy również zrobić jako filename = "C: \\ Documents and Settings \\ file0% d.txt"% i. Myślę, że to również powinno zadziałać. –

+1

Nie rób tego. To by przypuszczało, że jest 0 przed każdą liczbą od 1 do 32.% .2d doda 0, jeśli jest tylko jeden numer. Dla każdej liczby od 10 do 32 liczba ta pozostanie bez zmian. –

+0

Jeśli pliki mają cztery liczby całkowite na końcu, możemy również zrobić jako filename = "C: \\ Documents and Settings \\ plik% .4d.txt"% i. Myślę, że to również powinno zadziałać. Podobna nazwa pliku to file1234. –

3

Podałeś już odpowiedź. Btw, użyj with menedżera kontekstowe zamiast ręcznego wywoływania 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

Tak, opcje dałeś będzie działać, to dlaczego nie po prostu przetestować go?

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

lub

filename = "C:\\Documents and Settings\\file%d.txt" % i 
Powiązane problemy