下面的脚本应该以递归方式打开文件夹'pruebaba'中的所有文件,但是我收到此错误:
追踪(最近的呼叫最后):
文件 “/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()
有什么想法吗?
答案 0 :(得分:13)
使用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 :(得分:1)
你试图打开你看到的一切。你试图打开的一件事是一个目录;您需要检查条目is a file或is a directory,并从那里做出决定。 (错误IOError: [Errno 21] Is a directory
是否不够描述?)
如果 是一个目录,那么你还需要对你的函数进行递归调用,以便遍历该目录中的文件。
或者,您可能会对os.walk
function感兴趣,为您处理递归问题。
答案 2 :(得分:1)
os.listdir列出了文件和目录。您应该检查您尝试打开的内容是否真的是包含os.path.isfile
的文件