2010-04-05 22 views
6

La secuencia de comandos a continuación debe abrir todos los archivos dentro de la carpeta 'pruebaba' recursiva pero me sale este error:Python 2.5.2: intentar abrir los archivos de forma recursiva

Traceback (most recent call last):
File "/home/tirengarfio/Desktop/prueba.py", line 8, in f = open(file,'r') IOError: [Errno 21] Is a directory

Ésta es la jerarquía:

pruebaba 
    folder1 
    folder11 
     test1.php 
    folder12 
     test1.php 
     test2.php 
    folder2 
    test1.php 

El guión:

import re,fileinput,os 

path="/home/tirengarfio/Desktop/pruebaba" 
os.chdir(path) 
for file in os.listdir("."): 

    f = open(file,'r') 

    data = f.read() 

    data = re.sub(r'(\s*function\s+.*\s*{\s*)', 
      r'\1echo "The function starts here."', 
      data) 

    f.close() 

    f = open(file, 'w') 

    f.write(data) 
    f.close() 

Alguna idea?

Respuesta

10

Use os.walk. Camina recursivamente en el directorio y subdirectorios, y ya le da variables separadas para archivos y directorios.

import re 
import os 
from __future__ import with_statement 

PATH = "/home/tirengarfio/Desktop/pruebaba" 

for path, dirs, files in os.walk(PATH): 
    for filename in files: 
     fullpath = os.path.join(path, filename) 
     with open(fullpath, 'r') as f: 
      data = re.sub(r'(\s*function\s+.*\s*{\s*)', 
       r'\1echo "The function starts here."', 
       f.read()) 
     with open(fullpath, 'w') as f: 
      f.write(data) 
1

Está intentando abrir todo lo que ve. Una cosa que intentaste abrir era un directorio; necesita verificar si hay una entrada is a file o is a directory, y tomar una decisión desde allí. (El error fue no IOError: [Errno 21] Is a directory descriptiva suficiente?)

Si es un directorio, entonces usted querrá hacer una llamada recursiva a la función de caminar sobre los archivos en ese directorio también.

Alternativamente, puede que le interese el os.walk function para ocuparse de la recursividad para usted.

1

os.listdir las dos listas de archivos y directorios. Debería comprobar si lo que está intentando abrir realmente es un archivo con os.path.isfile

+0

me ayudó ... ¡gracias! – espais

Cuestiones relacionadas