用Python对目录进行迭代

我需要遍历给定目录的子目录并search文件。 如果我得到一个文件,我必须打开它,改变内容,并用我自己的线代替它。

我试过这个:

import os rootdir ='C:/Users/sid/Desktop/test' for subdir, dirs, files in os.walk(rootdir): for file in files: f=open(file,'r') lines=f.readlines() f.close() f=open(file,'w') for line in lines: newline = "No you are not" f.write(newline) f.close() 

但我得到一个错误。 我究竟做错了什么?

实际浏览目录时会按照您编码的方式进行操作。 如果用简单的print语句replace内部循环的内容,则可以看到每个文件都被find:

 import os rootdir = 'C:/Users/sid/Desktop/test' for subdir, dirs, files in os.walk(rootdir): for file in files: print os.path.join(subdir, file) 

如果在运行上述步骤时仍然出现错误,请提供错误消息。

返回子目录中所有文件的另一种方式是使用Python 3.4中引入的pathlib模块 ,它提供了一种面向对象的方法来处理文件系统path(Pathlib也可以通过PyPi上的pathlib2模块在 Python 2.7中获得 ):

 from pathlib import Path rootdir = Path('C:/Users/sid/Desktop/test') # Return a list of regular files only, not directories file_list = [f for f in rootdir.glob('**/*') if f.is_file()] # For absolute paths instead of relative the current dir file_list = [f for f in rootdir.resolve().glob('**/*') if f.is_file()] 

从Python 3.5开始, glob模块也支持recursion文件查找:

 import os from glob import iglob rootdir_glob = 'C:/Users/sid/Desktop/test/**/*' # Note the added asterisks # This will return absolute paths file_list = [f for f in iglob('**/*', recursive=True) if os.path.isfile(f)] 

上述任一方法的file_list都可以迭代,而不需要嵌套循环:

 for f in file_list: print(f) # Replace with desired operations 
 or subdir, dirs, files in os.walk(rootdir): os.chdir(rootdir) >>>>>>>>>>>>>>>>>>>>>>>>>> Pls add this line and try. for file in files: print file f=open(file,'r') lines=f.readlines()