我想打开一个文件夹中的一系列子文件夹,找到一些文本文件并打印出文本文件的某些行。我正在使用以下代码:
configfiles = glob.glob('C:/Users/sam/Desktop/file1/*.txt')
但这个命令无法访问子文件夹。有人知道如何使用相同的命令来访问子文件夹吗?
我想打开一个文件夹中的一系列子文件夹,找到一些文本文件并打印出文本文件的某些行。我正在使用以下代码:
configfiles = glob.glob('C:/Users/sam/Desktop/file1/*.txt')
但这个命令无法访问子文件夹。有人知道如何使用相同的命令来访问子文件夹吗?
glob.glob(pathname, *, recursive=False) # pathname = '/path/to/the/directory' or subdirectory
glob.iglob(pathname, *, recursive=False)
import glob
import os
configfiles = [f for f in glob.glob("C:/Users/sam/Desktop/*.txt")]
for f in configfiles:
print(f'Filename with path: {f}')
print(f'Only filename: {os.path.basename(f)}')
print(f'Filename without extensions: {os.path.splitext(os.path.basename(f))[0]}')
输出:
Filename with path: C:/Users/sam/Desktop/test_file.txt
Only filename: test_file.txt
Filename without extensions: test_file
帮助:os.path.splitext和os.path.basename的 文档
。
import os, glob, itertools
configfiles = itertools.chain.from_iterable(glob.iglob(os.path.join(root,'*.txt'))
for root, dirs, files in os.walk('C:/Users/sam/Desktop/file1/'))
configfiles
进行一次迭代。如果您需要一个真正的配置文件列表,可以在多个操作中使用,您必须通过使用list(configfiles)
来显式创建它。rglob
命令将无限递归到您的目录结构的最深子级。如果您只想要一层深度,则不要使用它。
我意识到 OP 正在谈论使用 glob.glob。然而,我相信这个回答解决了意图,即递归搜索所有子文件夹。
rglob
函数最近为一个数据处理算法产生了 100 倍的速度增长,该算法使用文件夹结构作为读取数据顺序的固定假设。但是,使用 rglob
,我们能够一次扫描所有位于指定父目录下或以下的文件,将它们的名称保存到列表中(超过一百万个文件),然后仅基于文件命名约定而不是所在文件夹来确定未来任何时刻需要打开哪些文件。