节点A>B>C>A之间的循环关系

2024-09-29 20:23:50 发布

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

这就是它前后的样子,因为我正试图用Python来解决这个问题。我已经试了好几个星期了。我很遗憾没有告诉Python做以下事情:

  1. 第1步:如果您在此文档中找到:“LinkedTo=”*(示例值:Node\ 3)*
  2. 第2步:然后停止
  3. 步骤3:转到上一个节点posx=并复制值*(示例值:10)*
  4. 步骤4:转到上一个NotePosY=并复制值*(示例值:100)*
  5. 第5步:然后找到文档上的下一个“节点3”
  6. 步骤6:并在NodePosX=30和NodePosY=300内替换复制的值10和100

  7. 第7步:然后查找下一个“LinkedTo=”*(示例值:Node_5)*,并重复第2步到第5步

这是在运行Python脚本之前的样子:

Begin 
    Name="Node_1"
    NodePosX=10
    NodePosY=100
    LinkedTo=Node_3
    LinkedTo=Node_5
End Object
Begin 
    Name="Node_2"
    NodePosX=20
    NodePosY=200
End Object
Begin 
    Name="Node_3"
    NodePosX=30
    NodePosY=300
End Object
Begin 
    Name="Node_4"
    NodePosX=40
    NodePosY=400
End Object
Begin 
    Name="Node_5"
    NodePosX=50
    NodePosY=500
End Object

在运行Python脚本之后,应该是这样的:

Begin 
    Name="Node_1"
    NodePosX=10
    NodePosY=100
    LinkedTo=Node_3
    LinkedTo=Node_5
End Object
Begin 
    Name="Node_2"
    NodePosX=20
    NodePosY=200
End Object
Begin 
    Name="Node_3"
    NodePosX=10
    NodePosY=100
End Object
Begin 
    Name="Node_4"
    NodePosX=40
    NodePosY=400
End Object
Begin 
    Name="Node_5"
    NodePosX=10
    NodePosY=100
End Object

你觉得我对Python要求太多了吗? 对这个问题的标题有什么更好的建议吗


Tags: name文档脚本node示例节点object步骤
1条回答
网友
1楼 · 发布于 2024-09-29 20:23:50

我雇了一个开发人员,这是他们写的代码

'''
By: Alex Reichenbach
'''
import re
begin_regex = re.compile("Begin")
name_regex = "(?<=Name=\"Node_).*(?=\")"
posX_regex = "(?<=NodePosX=).*"
posY_regex = "(?<=NodePosY=).*"
linkedTo_regex = "(?<=LinkedTo=).*"
end_regex = re.compile("End Object")

## Reading the contents of the file
text = open("1-Example-Original.txt", "r").read()
class Node:
def __init__(self):
self.name = ""
self.nodePosX = 0
self.nodePosY = 0
self.linked_to = []

def __str__(self):
linked = ""
for l in self.linked_to:
linked += "\nLinkedTo="+l
return """Begin
Name="%s"
NodePosX=%s
NodePosY=%s%s
End Object
"""%(self.name, self.nodePosX, self.nodePosY, linked)

## Read the text into the node objects
nodes = []
current_node = None
for line in text.split('\n'): ## Iterate through each line
if begin_regex.match(line): ## Begin
current_node = Node()
nodes.append(current_node)
elif re.findall(name_regex, line): ## Name
name = re.findall(name_regex, line)[0]
current_node.name = name
elif re.findall(posX_regex, line): ## PosX
posX = re.findall(posX_regex, line)[0]
current_node.nodePosX = posX
elif re.findall(posY_regex, line): ## PosY
posY = re.findall(posY_regex, line)[0]
current_node.nodePosY = posY
elif re.findall(linkedTo_regex, line): ## LinkedTo
name = re.findall(linkedTo_regex, line)[0]
current_node.linked_to.append(name)

## Copy the linked_to attributes
for i in range(len(nodes)):
for j in range(i, len(nodes)):
node1 = nodes[i]
node2 = nodes[j]
if node2.name in node1.linked_to:
node2.nodePosX = node1.nodePosX
node2.nodePosY = node1.nodePosY

## Print it all out
s = ""
for node in nodes:
s += str(node)
print(s)

## Write to File?
open("_edited.txt", "w").write(s)

相关问题 更多 >

    热门问题