[英]copy and sort multiple jpeg files and json files in one folder to another folder in subfolders folder using python script
我有大文件集
965_0000000005_0000000001_20211105153826.json
965_0000000005_0000000001_20211105153826.jpg
965_0000000005_0000000002_20211105153826.json
965_0000000005_0000000002_20211105153826.jpg
965_0000000005_0000000003_20211105153826.json
965_0000000005_0000000003_20211105153826.json
.
.
.
965_0000000005_0000000010_20211105153826.json
965_0000000005_0000000010_20211105153826.jpg
965_0000000006_0000000001_20211105153826.json
965_0000000006_0000000001_20211105153826.json
965_0000000007_0000000001_20211105153826.jpg
965_0000000007_0000000001_20211105153826.json
965_0000000008_0000000001_20211105153826.jpg
965_0000000008_0000000001_20211105153826.json
965_0000000009_0000000001_20211105153826.json
965_0000000009_0000000002_20211105153826.jpg
965_0000000010_0000000002_20211105153826.json
965_0000000010_0000000003_20211105153826.jpg
965_0000000011_0000000001_20211105153826.json
965_0000000011_0000000001_20211105153826.jpg
965_0000000011_0000000002_20211105153826.json
965_0000000011_0000000002_20211105153826.jpg
............
965_0000000011_0000000010_20211105153826.json
965_0000000011_0000000010_20211105153826.jpg
一起想通过提供输入来复制和排序它们
Enter product numbers:965-1000;100-110; 71
output :
965...jpeg file ok copied
965...json file ok copied
...
71 file doesnt exit.
for sort the file in the folder like
20220627
if 20220627_XXXX_NG_2_anomaly else 20220627_XXXX_OK_2_nomaly
gray_images -jpeg files
5_0000000001_
5_0000000002_
5_0000000003_
5_0000000004_
5_0000000010_
Json -json files
5_0000000001_
5_0000000002_
5_0000000003_
5_0000000004_
5_0000000010_
if20220627_XXXX_NG_3_anomaly
else20220627_XXXX_OK_3_nomaly
gray_images -jpeg files
6_0000000001_
7_0000000001_
8_0000000001_
9_0000000001_
10_0000000001_
Json -json files
6_0000000001_
7_0000000001_
8_0000000001_
9_0000000001_
10_0000000001_
if 20220627_XXXX_NG_4_anomaly else 220220627_XXXX_OK_4_nomaly
gray_images -jpeg files
11_000000001_
.
.
11_0000000010_
Json -json files
11_000000001_
.
.
11_0000000010_
一个产品 25 (10-5-10) jpeg 文件。 json 文件依赖于注解。 我被困在排序文件中。 请帮我编程。
将文件分隔到特定子目录的一种简单方法是使用os.path
库并逐步创建子目录,直到您到达可以根据文件扩展名复制文件的基础。
例如:
def output_path(filename, status, product, outpaths):
today = "".join(str(date.today()).split("-"))
parts = filename.split("_")
if parts[1] in outpaths:
num = outpaths[parts[1]]
else:
num = "3"
outpaths[parts[1]] = num
if status == "0":
status = "anomaly"
else:
status = "nomaly"
subdir = "_".join([today, product, str(num), status])
if os.path.splitext(filename)[1].lower() == ".json":
path = os.path.join(today, subdir, "json")
else:
path = os.path.join(today, subdir, "grey_images")
if not os.path.exists(path):
os.makedirs(path)
return os.path.join(path,filename)
如果您仍在使用与上次相同的程序,您可以像这样集成它。
import os
import shutil
from datetime import date
def gen_range(text):
start, end = [int(i) for i in text.split("-")]
return list(range(start,end))
def get_user_input():
nums = input("Enter search values - example: (123;135;561-568;12)\n")
if ";" in nums:
values = []
for value in [i for i in nums.split(';')]:
if "-" in value:
values += gen_range(value)
else:
values.append(value)
elif nums.isdigit():
values = [int(nums)]
elif "-" in nums:
values = gen_range(nums)
else:
raise ValueError
return list(map(str,values))
def get_input_values():
while True:
nums = get_user_input()
product = input("Enter product name: ")
status = input("Enter the product status\nEnter 0 for OK\nEnter 1 for NG\nEnter other for others\n")
d = {"numbers": nums, "status": status, "product": product}
print(d)
correct = input("Is the above information correct? yes/no: ")
if correct == "yes":
return d
def output_path(filename, status, product, outpaths):
today = "".join(str(date.today()).split("-"))
parts = filename.split("_")
if parts[1] in outpaths:
num = outpaths[parts[1]]
else:
num = "3"
outpaths[parts[1]] = num
if status == "0":
status = "anomaly"
else:
status = "nomaly"
subdir = "_".join([today, product, str(num), status])
if os.path.splitext(filename)[1].lower() == ".json":
path = os.path.join(today, subdir, "json")
else:
path = os.path.join(today, subdir, "grey_images")
if not os.path.exists(path):
os.makedirs(path)
return os.path.join(path,filename)
def copyfiles(numbers=None, status=None, product=None):
unused = numbers[:]
data = os.walk(os.path.normcase('./'))
outpaths = {"0000000005": "2", "0000000011": "4"}
for root, _, files in data:
for filename in files:
part = filename.split('_')[0]
name, ext = os.path.splitext(filename)
if part in numbers and ext.lower() in [".json",".jpeg",".jpg"]:
if part in unused:
unused.remove(part)
origin = os.path.join(root, filename)
dest = output_path(filename, status, product, outpaths)
try:
shutil.copyfile(origin, dest)
print(f"OK==>No {filename} has been copied.")
except:
print(f"NG==>No {part} failed to copy")
for number in unused:
print(f"NG==>No {number} does not exist")
if __name__ == "__main__":
params = get_input_values()
copyfiles(**params)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.