继续丰富database_tools
This commit is contained in:
parent
0a5c00ca09
commit
cf8d316567
|
|
@ -310,13 +310,12 @@ def SeperateFirstLine(string): # 切割一个含有换行的字符串
|
|||
contents = "\n".join([lines.strip() for lines in thelist[1:]])
|
||||
return (firstline,contents) # 返回第一行, 其余行形成的二元组, 每一行前后的空格都被删去
|
||||
|
||||
def ObtainDatatoModify(metadatafilepath,fieldsdictpath): #从metadata文件中获取需要修改的综合信息, metadata文件用双回车区分项, 单行的项表示此后的字段, 不小于两行的项中第一行是题目id, 第二行起是要修改的内容.
|
||||
def ObtainDatatoModify(metadatafilepath,fields_dict): #从metadata文件中获取需要修改的综合信息, metadata文件用双回车区分项, 单行的项表示此后的字段, 不小于两行的项中第一行是题目id, 第二行起是要修改的内容.
|
||||
#fieldsdictpath是字段信息数据库文件路径
|
||||
data = ReadTextFile(metadatafilepath)
|
||||
data = re.sub(r"\n[\s\n]*\n","\n\n",data) #去除一些无意义的空格和多余的回车
|
||||
datalist = data.split("\n\n")
|
||||
to_modify_list = []
|
||||
fields_dict = load_dict(fieldsdictpath)
|
||||
currentfield = "NotAField"
|
||||
for line in datalist:
|
||||
if line.strip() in fields_dict:
|
||||
|
|
@ -325,9 +324,87 @@ def ObtainDatatoModify(metadatafilepath,fieldsdictpath): #从metadata文件中
|
|||
currentfield = "NotAField"
|
||||
else:
|
||||
id,content = SeperateFirstLine(line)
|
||||
to_modify_list.append((currentfield,str(id).zfill(6),content)) #返回一个列表, 每一项是一个三元组, 三项依次为字段, 题号, 要修改的内容
|
||||
to_modify_list.append((currentfield,str(id).zfill(6),content))
|
||||
return to_modify_list #返回一个列表, 每一项是一个三元组, 三项依次为字段, 题号, 要修改的内容
|
||||
|
||||
def FloatToInt(string): #从字符串返回浮点数,如果值非常接近整数则返回该整数
|
||||
f = float(string)
|
||||
if abs(f-round(f))<0.01:
|
||||
f = round(f)
|
||||
return f #返回浮点数或整数
|
||||
|
||||
def OverwriteData(prodict,fieldsdict,field_id_and_content): #用覆盖方式修改题目某字段信息
|
||||
field,id,content = field_id_and_content
|
||||
fieldType = fieldsdict[field]["FieldType"]
|
||||
if not id in prodict:
|
||||
print("题号 %s 并不在数据库中"%id)
|
||||
else:
|
||||
if fieldType == "str":
|
||||
prodict[id][field] = content
|
||||
elif fieldType == "int" or fieldType == "float":
|
||||
content = FloatToInt(content)
|
||||
prodict[id][field] = content
|
||||
print("已覆盖 %s 的 %s 字段, 内容为 %s"%(id,field,content))
|
||||
return (id,field,content) #返回三元组: 题号, 字段, 覆盖内容
|
||||
|
||||
def AppendData(prodict,fieldsdict,field_id_and_content): #用添加方式修改题目某字段信息
|
||||
field,id,content = field_id_and_content
|
||||
fieldType = fieldsdict[field]["FieldType"]
|
||||
if not id in prodict:
|
||||
print("题号 %s 并不在数据库中"%id)
|
||||
else:
|
||||
if fieldType == "str":
|
||||
if content.strip() in prodict[id][field]:
|
||||
print("题号 %s 的 %s 字段, 内容 %s 已存在"%(id,field,content))
|
||||
else:
|
||||
prodict[id][field] = (prodict[id][field].strip() + "\n" + content).strip()
|
||||
print("已于 %s 的 %s 字段执行添加, 内容为 %s"%(id,field,content))
|
||||
elif fieldType == "list":
|
||||
lines = [line.strip() for line in content.split("\n")]
|
||||
for line in lines:
|
||||
if line in prodict[id][field]:
|
||||
print("题号 %s 的 %s 字段, 内容 %s 已存在"%(id,field,line))
|
||||
else:
|
||||
prodict[id][field] = prodict[id][field].copy() + [line]
|
||||
print("已于 %s 的 %s 字段执行添加, 内容为 %s"%(id,field,line))
|
||||
return (id,field,content) #返回三元组: 题号, 字段, 内容
|
||||
|
||||
def AppendMutualData(prodict,field_id_and_content): #添加两个id之间的same, related, unrelated关联
|
||||
field,id,content = field_id_and_content
|
||||
lines = [str(line).zfill(6) for line in content.split("\n")]
|
||||
for id2 in lines:
|
||||
if not id in prodict:
|
||||
print("题号 %s 并不在数据库中"%id)
|
||||
elif not id2 in prodict:
|
||||
print("题号 %s 并不在数据库中"%id2)
|
||||
else:
|
||||
if id2 in prodict[id][field]:
|
||||
print("题号 %s 的 %s 字段, 内容 %s 已存在"%(id,field,id2))
|
||||
else:
|
||||
prodict[id][field] = prodict[id][field] + [id2]
|
||||
print("已于 %s 的 %s 字段执行添加, 内容为 %s"%(id,field,id2))
|
||||
if id in prodict[id2][field]:
|
||||
print("题号 %s 的 %s 字段, 内容 %s 已存在"%(id2,field,id))
|
||||
else:
|
||||
prodict[id2][field] = prodict[id2][field] + [id]
|
||||
print("已于 %s 的 %s 字段执行添加, 内容为 %s"%(id2,field,id))
|
||||
return (id,field,content) #返回三元组: 题号, 字段, 内容
|
||||
|
||||
def AppendObjData(prodict,objdict,field_id_and_content): #添加目标编号数据
|
||||
field,id,content = field_id_and_content
|
||||
if not id in prodict:
|
||||
print("题号 %s 并不在数据库中"%id)
|
||||
else:
|
||||
lines = [line.strip() for line in content.split("\n")]
|
||||
for objid in lines:
|
||||
if not objid in objdict:
|
||||
print("目标编号 %s 并不在数据库中"%objid)
|
||||
elif objid in prodict[id][field]:
|
||||
print("题号 %s 的 %s 字段, 内容 %s 已存在"%(id,field,objid))
|
||||
else:
|
||||
prodict[id][field] = prodict[id][field] + [objid]
|
||||
print("已于 %s 的 %s 字段执行添加, 编号为 %s, 内容为 %s"%(id,field,objid,objdict[objid]["content"]))
|
||||
return (id,field,content) #返回三元组: 题号, 字段, 内容
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
|||
Reference in New Issue