95 lines
2.5 KiB
Python
95 lines
2.5 KiB
Python
'''
|
|
Warn = """\033[0;31;40m
|
|
=======警告=======
|
|
此脚本仅包含有限的“自动重命名”功能,它:
|
|
- 不会对Gerber文件进行解析
|
|
- 不会验证文件格式是否正确
|
|
- 不会处理钻孔文件
|
|
- 极有可能损坏你的文件或引起生产错误
|
|
- 需要你根据实际情况进行修改
|
|
如果你不知道自己在干什么,请手动修改文件而不是使用脚本
|
|
请编辑此脚本以解除警告
|
|
\033[0m"""
|
|
print(Warn)
|
|
raise Exception("READ THE WARNING")
|
|
'''
|
|
import yaml
|
|
import os
|
|
import re
|
|
|
|
fconfig = open("config.yaml", "r", encoding="utf-8")
|
|
frule = open("rule.yaml", "r", encoding="utf-8")
|
|
Config = yaml.load(fconfig, Loader=yaml.FullLoader)
|
|
Rule = yaml.load(frule, Loader=yaml.FullLoader)
|
|
|
|
|
|
def rand_str(size):
|
|
chars = b"0123456789abcdef"
|
|
data = bytearray(size)
|
|
for i in range(size):
|
|
ri = int.from_bytes(os.urandom(4), "big") % len(chars)
|
|
ch = chars[ri]
|
|
data[i] = ch
|
|
return data.decode("utf-8")
|
|
|
|
|
|
def rand_head_line_2():
|
|
r1 = rand_str(32)
|
|
r2 = rand_str(32)
|
|
return f"G04 {r1},{r2},10*"
|
|
|
|
|
|
# random generate header line 2
|
|
headers = Config["Header"].split("\n")
|
|
if len(headers) >= 2:
|
|
headers[1] = rand_head_line_2()
|
|
Config["Header"] = "\n".join(headers)
|
|
|
|
WorkDir = Config["WorkDir"]
|
|
DestDir = Config["DestDir"]
|
|
WorkDirFiles = os.listdir(WorkDir)
|
|
|
|
if not DestDir:
|
|
DestDir = os.path.join(WorkDir, "output")
|
|
if not os.path.exists(DestDir):
|
|
os.mkdir(DestDir)
|
|
|
|
# 创建PCB下单必读文档
|
|
with open(os.path.join(DestDir, Config["TextFileName"]), "w") as textFile:
|
|
textFile.write(Config["TextFileContent"])
|
|
|
|
# 检验文件是否齐全/重复匹配
|
|
for key, value in Rule.items():
|
|
matchFile = []
|
|
rePattern = re.compile(pattern=value)
|
|
|
|
for fileName in WorkDirFiles:
|
|
if rePattern.search(fileName):
|
|
matchFile.append(fileName)
|
|
|
|
if len(matchFile) < 1:
|
|
raise Exception(key + "匹配失败")
|
|
elif len(matchFile) > 1:
|
|
raise Exception(key + "重复匹配")
|
|
else:
|
|
print(key + " -> " + matchFile[0])
|
|
|
|
# 改名和加头操作
|
|
for key, value in Rule.items():
|
|
matchFile = ""
|
|
rePattern = re.compile(pattern=value)
|
|
|
|
for fileName in WorkDirFiles:
|
|
if rePattern.search(fileName):
|
|
matchFile = fileName
|
|
|
|
with open(os.path.join(WorkDir, matchFile), "r") as file:
|
|
fileData = file.read()
|
|
with open(os.path.join(DestDir, Config["FileName"][key]), "w") as file:
|
|
file.write(Config["Header"])
|
|
file.write(fileData)
|
|
|
|
fconfig.close()
|
|
frule.close()
|
|
exit()
|