как отфильтровать имя файла, если не включить 01.jpg из нескольких подкаталогов - PullRequest
0 голосов
/ 04 октября 2018

у меня есть структура каталогов, например, изображения включают dir_one one dir_two

dir_one не включает каталогdir_one включает 01.jpg 、 02.jpg

dir_two включает 02.jpg 、 03.jpg

dir_three включает 02.jpg 、 03.jpg 、 04.jpg

iхочу получить список о пути к каталогу, если каталог не включает 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"
  ]
}

enter image description here

1 Ответ

0 голосов
/ 04 октября 2018

Вы должны инициализировать 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...