这个白色的 space 是从哪里来的?
Where is this white space coming from?
我正在 post- 处理 python 脚本的输出,该脚本为我的自制笔式绘图仪生成 GCODE。
post-处理器在我的 GCODE 中的一个关键信息位之后(在每个 X 和 Y 坐标值之后)添加了一个白色 space,导致 GCODE 无效。
外观示例:
我的输出结果示例:
我试图从可疑的代码片段中删除 \s 运算符,我尝试在各个区域使用 .lstrip() 来删除白色的 spaces 但无济于事。我还删除了代码中存在的所有双 space,到目前为止没有任何帮助。
我怀疑这段代码正在做:
def round_coordinates(self,parameters) :
try:
round_ = int(parameters)
except :
self.error("Bad parameters for round. Round should be an integer! \n(Parameters: '%s')"%(parameters), "error")
gcode = ""
for s in self.gcode.split("\n"):
for a in "xyzijkaf" :
r = re.search(r"(?i)("+a+r")\s*(-?\s*(\d*\.?\d*))", s)
if r :
if r.group(2)!="":
s = re.sub(
r"(?i)("+a+r")\s*(-?)\s*(\d*\.?\d*)",
(r" %0."+str(round_)+"f" if round_>0 else r" %d")%round(float(r.group(2)),round_),
s)
gcode += s + "\n"
self.gcode = gcode
我希望能够找出白色space的来源,我可能没有显示正确的代码,所以我链接了源文件。它出现在第 2648 行,在第 5440 行还有一个似乎相关的 round 函数。
这是完整代码的 pastebin:
https://pastebin.com/s8J1H8r6
我附上了一个示例,可以 运行 检查一下。我觉得这很有趣,但我无法找到一种很好的方法来解决它......如果我遇到它,我会用更好的答案更新它。
现在,我发现我们需要在 </code> 和 <code>%d
之间放置一些字符才能使代码正常工作。我不会使用以下方法来解决问题,但它至少有效。我所做的是将 ---
放在两者之间,然后使用 replace
函数将其删除。
import re
def round_coordinates() :
round_ = 5
gcode = """O1000
T1 M6
G0 G90 G40 G21 G17 G94 G80
G54 X-75 Y-25 S500 M3
G43 Z100 H1
Z5
G1 Z-20 F100
X-50 M8
Y0
X0 Y50
X50 Y0
X0 Y-50
X-50 Y0
Y25
X-75
G0 Z100
M30"""
for s in gcode.split("\n"):
for a in "xyzijkaf" :
r = re.search(r"(?i)("+a+r")\s*(-?\s*(\d*\.?\d*))", s)
if r :
if r.group(2)!="":
s = re.sub(
r"(?i)("+a+r")\s*(-?)\s*(\d*\.?\d*)",
(r"---%0."+str(round_)+"f" if round_>0 else r"---%d")%round(float(r.group(2)),round_),
s)
s = s.replace("---", "")
gcode += s + "\n"
return gcode
print(round_coordinates())
PS。我想我会使用 format
函数而不是 %
...
我正在 post- 处理 python 脚本的输出,该脚本为我的自制笔式绘图仪生成 GCODE。
post-处理器在我的 GCODE 中的一个关键信息位之后(在每个 X 和 Y 坐标值之后)添加了一个白色 space,导致 GCODE 无效。
外观示例:
我的输出结果示例:
我试图从可疑的代码片段中删除 \s 运算符,我尝试在各个区域使用 .lstrip() 来删除白色的 spaces 但无济于事。我还删除了代码中存在的所有双 space,到目前为止没有任何帮助。
我怀疑这段代码正在做:
def round_coordinates(self,parameters) :
try:
round_ = int(parameters)
except :
self.error("Bad parameters for round. Round should be an integer! \n(Parameters: '%s')"%(parameters), "error")
gcode = ""
for s in self.gcode.split("\n"):
for a in "xyzijkaf" :
r = re.search(r"(?i)("+a+r")\s*(-?\s*(\d*\.?\d*))", s)
if r :
if r.group(2)!="":
s = re.sub(
r"(?i)("+a+r")\s*(-?)\s*(\d*\.?\d*)",
(r" %0."+str(round_)+"f" if round_>0 else r" %d")%round(float(r.group(2)),round_),
s)
gcode += s + "\n"
self.gcode = gcode
我希望能够找出白色space的来源,我可能没有显示正确的代码,所以我链接了源文件。它出现在第 2648 行,在第 5440 行还有一个似乎相关的 round 函数。
这是完整代码的 pastebin: https://pastebin.com/s8J1H8r6
我附上了一个示例,可以 运行 检查一下。我觉得这很有趣,但我无法找到一种很好的方法来解决它......如果我遇到它,我会用更好的答案更新它。
现在,我发现我们需要在 </code> 和 <code>%d
之间放置一些字符才能使代码正常工作。我不会使用以下方法来解决问题,但它至少有效。我所做的是将 ---
放在两者之间,然后使用 replace
函数将其删除。
import re
def round_coordinates() :
round_ = 5
gcode = """O1000
T1 M6
G0 G90 G40 G21 G17 G94 G80
G54 X-75 Y-25 S500 M3
G43 Z100 H1
Z5
G1 Z-20 F100
X-50 M8
Y0
X0 Y50
X50 Y0
X0 Y-50
X-50 Y0
Y25
X-75
G0 Z100
M30"""
for s in gcode.split("\n"):
for a in "xyzijkaf" :
r = re.search(r"(?i)("+a+r")\s*(-?\s*(\d*\.?\d*))", s)
if r :
if r.group(2)!="":
s = re.sub(
r"(?i)("+a+r")\s*(-?)\s*(\d*\.?\d*)",
(r"---%0."+str(round_)+"f" if round_>0 else r"---%d")%round(float(r.group(2)),round_),
s)
s = s.replace("---", "")
gcode += s + "\n"
return gcode
print(round_coordinates())
PS。我想我会使用 format
函数而不是 %
...