为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喵时光机 2021-06-30 13:57:30
我有像图像一样的目录结构,包括 dir_one、dir_twodir_one 不包含任何目录dir_two 包括 dir_threedir_three 不包含任何目录dir_one 包含01.jpg、02.jpgdir_two 包含 02.jpg、03.jpgdir_3 包含02.jpg、03.jpg、04.jpg我想要一个关于目录路径的列表,如果目录不包含 01.jpg将附加到一个列表中,然后我将转换为一个 json 文件    import jsonimport osdef 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 Lfile_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"  ]}
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

你应该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))


查看完整回答
反对 回复 2021-07-06
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号