Python字符串错误字符

2021-01-28 08:03:46 发布

您现在位置:Python中文网/ 问答频道 /正文

让我首先说,我试图创建一个最小的示例,但无法复制结果。我尽量不把我所有的代码都放在这里,但我不确定用其他方法来说明这个问题。我正在编写一个类来将应用程序中的数据输出为特定格式,但在代码中得到了错误的结果。在

我试图输出的格式应该如下所示:

Nodestyle“nodeType”“name”

“属性类型属性名称”[值]

如果属性链接到另一个节点

“参考属性类型属性名称”[“nodename:输出属性名“]

示例:

 Bxdf "PxrDisney" "7fcfd465-87c3-4092-98b9-b67d1655bc32" 
 "color baseColor" [0.20.50.8] 
 "color emitColor" [0.00.00.0] 
 "float subsurface" [0] 
 "reference color subsurfaceColor" ["a3bb37f2-dbb8-407b8a1ac93822ebef7c:resultRGB"] 
 "float metallic" [0] 
 "float specular" [.5] 
  "float specularTint" [0] 
  "float roughness" [.25] 
  "float anisotropic" [0] 
  "float sheen" [0] 
  "float sheenTint" [.5] 
  "float clearcoat" [0] 
  "float clearcoatGloss" [1] 
  "float presence" [1] 
  "int inputAOV" [0] 
  Pattern "PxrHSL" "a3bb37f2-dbb8-407b-8a1a-c93822ebef7c" 
  "color inputRGB" [0.00.00.0] 
  "float hue" [0.0] 
  "float saturation" [1.0] 
  "float luminance" [1.0] 

我得到的结果是这样的:

^{pr2}$

如果输出字符串中的特殊字符和额外的项,直到引用另一个节点为止,看起来是这样。如果我链接到另一个属性,比如说basecolor,那么它只会给basecolor错误的结果。如果根本没有连接就没有问题。为什么弦会产生这种行为?这是有问题的班级。该类采用我逐步遍历的节点对象数组。在

#This will handel the export of the RIB contaning all the shader calls
class exporter ():

    nodes = None
    dicNodes = {}
    outStream = []

    #Method Two: Use shader as a starting point
    #Find the shader
    #go through each attribute on the shader

    #if connected check attrs on connected node

    def __init__(self, incomenodes):
        self.nodes = incomenodes
        dicNodes = {}
        outStream = []

        #create a dic using nids as keys
        for node in self.nodes:
            self.dicNodes[str(node.nid)] = node

        #Run Export Command for each shader
        x = 0
        for node in self.nodes:
            print str(node.nodeType.nType)
            if str(node.nodeType.nType) == 'bxdf':
                self.streamMe(node)

        target = open('/home/jspada20/outStream.RIB', 'w')

        print 'JAMES! There are ', len(self.outStream), 'items in the out stream'
        for line in self.outStream:
            target.write(line)
            print line
        target.close()

    def streamMe(self, node):

        #Layout for the header of a node call is....

        #Pattern "PxrThinFilm" "PxrThinFilm1"
        #Bxdf "PxrDisney" "PxrDisney1"
        #{Type} "{Identifyer}" "{Name/UID}"

        moreNodes = []

        #need to fix lower case letters comming in from XML source
        nodefunction = None
        if str(node.nodeType.nType[0]) == 'p':
            nodefunction = 'Pattern'
        elif str(node.nodeType.nType[0]) == 'b':
            nodefunction = "Bxdf"
        else:
            nodefunction = str(node.nodeType.nType)


        self.outStream.append(nodefunction + ' "' + str(node.nodeType.nName) + '" ' + '"' + str(node.nid) + '" \n ')



        for attr in node.inputs:

            #Check to see if it is connected

            #if not connected:
            if attr.currentConnectedNode is None:

                #Check to see what type the value is. This will govern the export scheme
                if str(attr.argType) == "int":
                    #print '"'+ str(attr.argType), attr.name + '" [' + str(attr.value) + ']'
                    self.outStream[len(self.outStream) - 1] = self.outStream[len(self.outStream) - 1] + '"' + str(attr.argType) + " " + attr.name + '" [' + str(attr.value) + '] \n '
                elif str(attr.argType) == "float":
                    if str(attr.value[len(str(attr.value))-1]) == '.':
                        outVal = str(attr.value) + '0'
                    else:
                        outVal = str(attr.value)
                    #print '"'+ str(attr.argType), attr.name + '" [' + outVal + ']'
                    self.outStream[len(self.outStream) - 1] = str(self.outStream[len(self.outStream) - 1]) + '"' + str(attr.argType) + " " + attr.name + '" [' + str(attr.value) + '] \n '

                elif str(attr.argType) == "color":
                    #print '"'+ str(attr.argType), attr.name + '" [' + str(attr.value.r), str(attr.value.g), str(attr.value.b) + ']'
                    self.outStream[len(self.outStream) - 1] = str(self.outStream[len(self.outStream) - 1]) + '"' + str(attr.argType) + " " + attr.name + '" [' + str(attr.value.r) + str(attr.value.g) + str(attr.value.b) + '] \n '

                elif str(attr.argType) == "string":
                    #print '"'+ str(attr.argType), attr.name + '" ["' + attr.value + '"]'
                    self.outStream[len(self.outStream) - 1] = str(self.outStream[len(self.outStream) - 1]) + '"' + str(attr.argType) + " " + attr.name + '" [' + str(attr.value) + '] \n '

            else:
                self.outStream[len(self.outStream) - 1] = str(self.outStream[len(self.outStream) - 1]) + '"reference ' + str(attr.argType) + " " + attr.name + '"', '["' + str(attr.currentConnectedNode.nid) + ':' + attr.currentConnectedOutput.name + '"] \n '
                moreNodes.append(str(attr.currentConnectedNode.nid))

        for ids in moreNodes:
            self.streamMe(self.dicNodes[ids])
1条回答
网友
1楼 ·

当我将这段代码从print语句转换为在列表中存储信息时,我遗漏了一个逗号。元组可以这样声明:

myTuple=“1”、“2”、“3”

通过在语句中使用逗号,我正在转换字符串。在

将此语句中的逗号改为+就解决了这个问题。来自c++的我不习惯可变的数据类型!在

            self.outStream[len(self.outStream) - 1] = str(self.outStream[len(self.outStream) - 1]) + '"reference ' + str(attr.argType) + " " + attr.name + '"' '["' + str(attr.currentConnectedNode.nid) + ':' + attr.currentConnectedOutput.name + '"] \n '

相关问题