根据目录名处理json文件

时间:2018-01-16 21:45:59

标签: python regex directory

在基本目录中,我有n个不同的目录,这些目录本身包含几个包含json文件的子目录。例如:

$base_bath/foo-2018-11-1/bb/1.jsonl

$base_bath/bar-2018-11-2/aa/2.jsonl

...

这些目录中的每一个都以foobar开头。我需要根据父目录是以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)

但是,这不会返回任何结果。

如何过滤目录路径,以便我可以分别创建属于foobar目录的所有文件的两个集合?

2 个答案:

答案 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']