Python 2.5.2:尝试递归打开文件

Python 2.5.2: trying to open files recursively

下面的脚本应该以递归方式打开文件夹"pruebaba"中的所有文件,但我得到了这个错误:

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

这是层次结构:

1
2
3
4
5
6
7
8
9
pruebaba
  folder1
    folder11
       test1.php
    folder12
       test1.php
       test2.php
  folder2
    test1.php

剧本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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()

有什么想法吗?


使用os.walk。它递归地进入目录和子目录,并且已经为文件和目录提供了单独的变量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)

os.listdir列出了文件和目录。您应该检查您试图打开的文件是否真的是一个带有os.path.is file的文件


你想打开你看到的一切。您试图打开的一件事是一个目录;您需要检查一个条目是文件还是目录,并从中作出决定。(错误IOError: [Errno 21] Is a directory是否描述不够?)

如果它是一个目录,那么您需要对函数进行递归调用,以便遍历该目录中的文件。

或者,您可能对os.walk函数感兴趣,以便为您处理递归性。