如果不包含来自多子目录的 01.jpg,如何过滤文件名

我有像图像一样的目录结构,包括 dir_one、dir_two


dir_one 不包含任何目录


dir_two 包括 dir_three


dir_three 不包含任何目录


dir_one 包含01.jpg、02.jpg


dir_two 包含 02.jpg、03.jpg


dir_3 包含02.jpg、03.jpg、04.jpg


我想要一个关于目录路径的列表,如果目录不包含 01.jpg

将附加到一个列表中,然后我将转换为一个 json 文件


    import json

import os

def file_name(file_dir):

    L=[]

    for dirpath, dirnames, filenames in os.walk(file_dir):

        for file in filenames :

            if os.path.splitext(file)[1] == '.jpg':

                L.append(os.path.join(dirpath, file))

    return L


file_dir = 'F:\\tmp\\images'

files_list=file_name(file_dir)


item_list = set()

for item in files_list:

    print(item[-6:])

    index_of_dir_path = item.rfind('\\')

    filter_str='01.jpg'

    # if filter_str not in files_list:

    if filter_str not in item:

        item_list.add(item[0:index_of_dir_path])


json_data = {

    "dirPath_not_include_01_jpg_file":list(item_list)

}

target_json_path='out.json'

with open(target_json_path, 'w') as f:

    json_dumps = json.dumps(json_data, f, ensure_ascii=False, indent=2)

    f.write(json_dumps)

我希望制作一个 json 文件,例如不包含 dir_one 项目路径(因为 dir_one 包含 01.jpg)


{

  "dirPath_not_include_01_jpg_file": [

    "F:\\tmp\\images\\dir_two\\dir_three",

    "F:\\tmp\\images\\dir_four",

    "F:\\tmp\\images\\dir_five",

    "F:\\tmp\\images\\dir_two"

  ]

}

但不是代码将包含 dir_one 项目路径


{

  "dirPath_not_include_01_jpg_file": [

    "F:\\tmp\\images\\dir_two\\dir_three",

    "F:\\tmp\\images\\dir_one",

    "F:\\tmp\\images\\dir_four",

    "F:\\tmp\\images\\dir_five",

    "F:\\tmp\\images\\dir_two"

  ]

}

http://img3.mukewang.com/60e41a760001a1a206130330.jpg

喵喵时光机
浏览 84回答 1
1回答

梦里花落0921

你应该item_list在for循环外初始化;否则,每次迭代都会覆盖其先前的值。您还应该创建item_list一个集合,这样如果.jpg同一目录下有多个文件,它们就不会导致列表中出现重复的目录:item_list=set()for item in files_list:    print(item)    index_of_dir_path = item.rfind('\\')    print(item[0:index_of_dir_path])    item_list.add(item[0:index_of_dir_path])json_data = {    "dirPath_not_include_01_jpg_file":list(item_list)}如果要排除包含的目录,01.jpg还应该在将文件添加到列表之前检查它:for dirpath, dirnames, filenames in os.walk(file_dir):    if all('01.jpg' not in file for file in filenames):        for file in filenames :            if os.path.splitext(file)[1] == '.jpg':                L.append(os.path.join(dirpath, file))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python