这里有两个python函数将数据从一个文件传输到另一个文件。源文件和目标文件都具有相同数量的对象,但具有不同的数据。Python中多循环逻辑和速度优化?
def getBlock(rigObj, objName):
rigObj.seek(0)
Tag = False
block = ""
for line in rigObj:
if line.find("ObjectAlias " + str(objName) + "\n") != -1:
for line in rigObj:
if line.find("BeginKeyframe") != -1:
Tag = True
elif line.lstrip().startswith("0.000 ") and line.rstrip().endswith("default"):
Tag = False
break
elif Tag:
block += line
return (block)
def buildScene(sceneObj, rigObj, objList):
sceneObj.seek(0)
rigObj.seek(0)
newscene = ""
for line in sceneObj:
newscene += line
for obj in objList:
if line.find("ObjectAlias " + obj + "\n") != -1:
Tag = True
for line in sceneObj:
if line.find("BeginKeyframe") != -1:
newscene += line
newscene += getBlock(rigObj, obj)
Tag = False
elif line.lstrip().startswith("0.000 ") and line.rstrip().endswith("default"):
newscene += line
Tag = True
break
elif Tag:
newscene += line
return (newscene)
getBlock是用于从rigobj获取数据的子功能;
buildScene是我的主要功能,它有三个参数:
第一个参数(sceneobj)是我想要放入数据的文件;
第二个参数(rigobj)是我从中获取数据的文件;
第三个参数(objlist)是要传输什么对象数据的列表。
到目前为止,函数,它的工作,唯一的问题是有点慢的(sceneobj < 10MB,rigobj < 2MB,objlist < 10个对象),我不知道是否有代码是一个逻辑问题,我应该先循环sceneObj还是先循环objList?它会影响速度吗?
UPDATE:
两个sceneObj和rigObj有这样类似的数据:
lines
BeginObject
lines
ObjectAlias xxx #--> object in transfer list
lines
BeginKeyframe 10 12
-9.000 4095 default #--> transfer begins
lines #--> transfer from rigObj to sceneObj and override lines in sceneObj
-8.000 63 default #--> same
lines #--> same
-7.000 63 default #--> same
lines #--> same
-1.000 63 default #--> same
lines #--> transfer ends
0.000 -1 default
lines
EndKeyframe
EndMotion
lines
EndObject
的数据要被转移和overrided只有线bewteen BeginKeyframe和0.000 -1默认任何指定的对象(由objList)
你可以添加分析器结果和输入数据的例子吗? – Arnial
@Arnial更新了我的文章 – Tian
rigObj可能多次使用相同的ObjectAlias但数据不同? – Arnial