作为编程的新手,我尝试单独测试每个功能,确保它正常工作。 这是我的问题:对于单一的简单测试,它有效;将它转换为函数并将它们组合成一个脚本,它们不起作用 例如:
def getRigs (fileObj):
fileObj.seek(0)
rigList = []
Tag = False
for line in fileObj:
if line.find("[BeginRigs]") != -1:
Tag = True
elif line.find("[EndRigs]") != -1:
Tag = False
elif Tag:
rigList.append(line.strip())
return (rigList)
def getObjects (fileObj):
fileObj.seek(0)
objList = []
Tag = False
for line in fileObj:
if line.find("[BeginObjects]") != -1:
Tag = True
elif line.find("[EndObjects]") != -1:
Tag = False
elif Tag:
objList.append(line.strip())
return (objList)
def dummyRig (rigObj, objName):
dummy = ""
for rig in rigObj:
with open(rig, "r") as infile:
#rigObj.seek(0)
Tag = None
for line in infile:
for obj in objName:
if line.find("ObjectAlias " + obj + "\n") !=-1:
Tag = "Mark"
dummy += line
break
elif line.find("BeginKeyframe") != -1:
if Tag == "Mark":
Tag = "Copy"
break
elif line.find("EndKeyframe") != -1:
if Tag == "Copy":
Tag = None
dummy += line
break
if Tag == "Copy":
dummy += line
return (dummy)
def getBlock (rigObj, objName):
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)
inputconfig = open("config.cfg", "r")
infile = sys.argv[1]
inputscene = open(infile, "r")
outfile = infile.split(".")[0] + "_updated.fxs"
outputscene = open(outfile, "w")
a_rigList = getRigs (inputconfig)
a_objList = getObjects (inputconfig)
a_dummyRig = dummyRig (a_rigList, a_objList)
#print a_dummyRig #----> Output as expected
tmp = getBlock (a_dummyRig, a_objList)
outputscene.write(tmp) #----> Gvie me empty output!
如果我单独测试“getBlock”函数,它可以正常工作:
with open("result_from_a_dummyRig", "r") as rigObj, open("result", "w") as output:
Tag = False
for line in rigObj:
if line.find("ObjectAlias " + "rooster_bn_featherLa_rt_08" + "\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:
output.write(line)
我做错了什么?
编辑:添加更多我的代码,希望它有助于解决问题。该代码设计用于从其他文件复制一些外部数据以更新我当前的文件
谢谢 bruno ,我明白了你的意思。 dummyRig函数给我一个字符串但不是“真实”文件。并且getBlock函数需要“真实”文件输入。对吗?
仍然希望有人给我更多有用的帮助,我不是程序员,我对python不太了解。
答案 0 :(得分:0)
在你的"测试"中,你正在迭代打开的文件。文件迭代器遍历文件的行。
在您的脚本中,您传递给getBlock
的内容是一个字符串,因此您需要对字符串的各个字符进行迭代。毫不奇怪,你没有得到相同的结果。
如果希望getBlock
能够同时处理打开的文件或某些仲裁字符串,则必须将字符串包装在一些类似文件的对象中,该对象将遍历行,而不是字符。我想到了stdlib的StringIO
模块......
另外,如果你真的想要认真对待测试,请使用一些自动化的单元测试框架(unittest可能不是最性感的,但它在stdlib中)并确保你真的测试你将通过的同样的东西你的功能;)