2012-10-16 48 views
5

Come posso aprire molti file contemporaneamente nel linguaggio di programmazione Python per eseguire il mio programma?apertura di più file in Python

Ho circa 15 file, solo ora ho lavorato con uno di loro come di seguito:

f=open("Exemplo_1.txt","rU") 
+1

Quale problema stai affrontando con l'apertura di più file, se riesci ad aprirne uno? –

risposta

3
f1=open("Exemplo_1.txt","rU"); 
f2=open("Exemplo_2.txt","rU"); 
... 
f15=open("Exemplo_15.txt","rU"); 

Stai fondamentalmente la creazione di oggetti di file per ottenere l'accesso ai file.

+0

Se non è necessario aprirli in parallelo, ti consiglio di usare 'con (apri (" Exemplo_1.txt "," rU ")) come f1:' invece - la parola chiave with cleanup correttamente in caso di un'eccezione. – thegrinner

+5

Qualche possibilità di convincerti a rimuovere il punto e virgola ;-) – mgilson

+3

L'uso di quindici nomi distinti per quindici file aperti sembra poco pratico .. a meno che ognuno di essi non venga trattato in modo diverso, sarà comunque necessario inserire qualcosa di iterabile evitare un sacco di duplicazione del codice. Penso che sia probabilmente una buona idea metterli in una lista o in un dittico. – DSM

3

farei qualcosa di simile:

try: 
    f = [open("Exemplo_%d.txt" % i, "rU") for i in range(1, 16)] 
    # do stuff 
finally: 
    for fh in f: 
     fh.close() 

Vedi try/finally.

+0

Questo ha funzionato per me come un fascino. Voglio solo capire la sintassi però. % d e% i part ... –

+0

Ho trovato questo molto utile. Avevo bisogno di aprire 1000 file e scrivere un campione casuale di un set di dati di grandi dimensioni su ciascuno. Il set di dati di grandi dimensioni è troppo grande per adattarsi alla memoria. – denson

1

se avete bisogno di un ciclo su più file in un solo colpo, utilizzare il modulo fileinput

for x in fileinput.input(['patterns.in', 'logfile.txt']): 
    print x 
5

Si potrebbe utilizzare una combinazione di glob e fileinput

import fileinput 
from glob import glob 

fnames = glob('Exemplo_*.txt') 
for line in fileinput.input(fnames): 
    pass # do whatever