如果不包含多个子目录中的 01.jpg,如何过滤文件名
how filter filename if not include 01.jpg from multi sub directory
我有这样的目录结构
图片包括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_three包括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"
]
}
您应该在 for
循环之外初始化 item_list
;否则它的先前值会在每次迭代时被覆盖。您还应该将 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))
我有这样的目录结构 图片包括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_three包括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"
]
}
您应该在 for
循环之外初始化 item_list
;否则它的先前值会在每次迭代时被覆盖。您还应该将 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))