在基本目录中,我有n
个不同的目录,这些目录本身包含几个包含json文件的子目录。例如:
$base_bath/foo-2018-11-1/bb/1.jsonl
$base_bath/bar-2018-11-2/aa/2.jsonl
...
这些目录中的每一个都以foo
或bar
开头。我需要根据父目录是以jsonl
还是foo
开头,以不同方式处理子目录中的所有bar
个文件。
import os
import re
foo_files = []
bar_files = []
for root, dirs, files in os.walk(base_path):
for file in files:
if re.search(r'.*foo.*jsonl', file):
foo_files.append(file)
print(os.path.join(root, file))
else:
bar_files.append(file)
但是,这不会返回任何结果。
如何过滤目录路径,以便我可以分别创建属于foo
和bar
目录的所有文件的两个集合?
答案 0 :(得分:0)
你只想要文件名吗?不是完整的路径?
for root, dirs, files in os.walk(base_path):
if root == base_path:
continue # skip iterating through base_path in case any of those files are a positive match
else:
for file in files:
if 'foo' in root and file.endswith('.jsonl'): # You're now in a foo directory
foo_files.append(file)
elif 'bar' in root and file.endswith('.jsonl'): # You're now in a bar directory
bar_files.append(file)
如果您确实想要完整路径,请在os.path.join(root, file)
功能中执行append()
。
修改:如果您实际上在寻找扩展程序.json
,请在两种条件下更新为.endswith('.jsonl')
。
答案 1 :(得分:0)
您可以使用os.listdir和os.chdir导航到您的文件夹,我发布的代码显示最接近的解决方案,使用listdir您可以遍历文件夹而无需走进您不需要的文件夹探索
In [8]: import os
In [9]: valids = [e for e in os.listdir() if e.startswith('foo')]
In [10]: valids
Out[10]: ['foo-3', 'foo-4', 'foo-2', 'foo-0', 'foo-1']
In [11]: filepaths = []
In [12]: for folder in valids:
...: os.chdir(folder)
...: for file in [f for f in os.listdir() if f.endswith('.json')]:
...: filepaths.append(os.sep.join(['.', folder, file]))
...: os.chdir('..')
...:
In [13]: filepaths
Out[13]:
['./foo-3/file-0.json',
'./foo-4/file-1.json',
'./foo-2/file-2.json',
'./foo-0/file-3.json',
'./foo-1/file-4.json']