我想在文件夹中打开一系列子文件夹,然后找到一些文本文件并打印一些文本文件行。我正在使用这个:
configfiles = glob.glob('C:/Users/sam/Desktop/file1/*.txt')
但这也无法访问子文件夹。有谁知道我也可以使用相同的命令来访问子文件夹?
在Python 3.5及更高版本中,使用新的递归**/功能:
**/
configfiles = glob.glob('C:/Users/sam/Desktop/file1/**/*.txt', recursive=True)
当recursive被设置时,**随后是路径分隔匹配0或多个子目录。
recursive
**
在早期的Python版本中,glob.glob()无法递归列出子目录中的文件。
glob.glob()
在这种情况下,我将改用os.walk()结合fnmatch.filter():
os.walk()
fnmatch.filter()
import os import fnmatch path = 'C:/Users/sam/Desktop/file1' configfiles = [os.path.join(dirpath, f) for dirpath, dirnames, files in os.walk(path) for f in fnmatch.filter(files, '*.txt')]
这将递归遍历您的目录,并将所有绝对路径名返回到匹配.txt文件。在这种 特定 情况下,fnmatch.filter()可能是矫kill过正,您也可以使用.endswith()测试:
.txt
.endswith()
import os path = 'C:/Users/sam/Desktop/file1' configfiles = [os.path.join(dirpath, f) for dirpath, dirnames, files in os.walk(path) for f in files if f.endswith('.txt')]