Python 2.5.2: попытка рекурсивного открытия файлов - PullRequest
6 голосов
/ 05 апреля 2010

Сценарий ниже должен рекурсивно открывать все файлы в папке 'pruebaba', но я получаю эту ошибку:

Traceback (последний последний вызов):
файл "/Home/tirengarfio/Desktop/prueba.py", строка 8, в f = open (file, 'r') IOError: [Errno 21] Является каталогом

Это иерархия:

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

Сценарий:

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

Есть идеи?

Ответы [ 3 ]

13 голосов
/ 05 апреля 2010

Использование os.walk.Он рекурсивно входит в каталог и подкаталоги и уже дает вам отдельные переменные для файлов и каталогов.

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 голос
/ 05 апреля 2010

os.listdir выводит список каталогов и . Вы должны проверить, действительно ли вы пытаетесь открыть файл с os.path.isfile

1 голос
/ 05 апреля 2010

Вы пытаетесь открыть все, что видите.Одна вещь, которую вы пытались открыть, была каталогом;вам нужно проверить, является ли запись файлом или каталог , и принять решение оттуда.(Была ли ошибка IOError: [Errno 21] Is a directory недостаточно описательной?)

Если она является каталогом, то вы захотите сделать рекурсивный вызов вашей функции для обхода файлы в этом каталоге.

В качестве альтернативы вам может быть интересна функция os.walk , которая позаботится о рекурсивности для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...