Warm tip: This article is reproduced from serverfault.com, please click

python-查找,替换和串联字符串

(python - Find, Replace, and Concatenate strings)

发布于 2020-12-02 15:36:18

经过5年以上的不活动之后,我才重新学习python;我一开始就做的不好,这并没有帮助...这是我想要做的:

  1. 在文件中查找字符串并将其替换为另一个字符串(带有G1的G00)
  2. 查找一行以特定字符串开头并在其末尾连接一个字符串的所有实例
  3. 原始文件aaaaa.gcode保持不变,所有更改都保存到bbbb.gcode。

两组代码都分别按预期工作。我尝试了许多不同的方法将两组代码添加在一起,但是没有任何效果。

样本文件(C:\ gcode \ aaaa.gcode)

# start of file
some text
other text

# more text
G00 X1 Y1
G00 X2 Y2
# other text
G00 X3 Y3
G00 X4 Y4

#end of file

为了最终结果,我希望拥有:

# start of file
some text
other text

# more text
G1 X1 Y1 Z0.3
G1 X2 Y2 Z0.3
# other text
G1 X3 Y3 Z0.3
G1 X4 Y4 Z0.3

#end of file

样例代码/结果

  1. 查找替换-用G1替换G00
Code:
    with open(r'C:\gcode\aaaa.gcode', 'r') as fin, open(r'C:\gcode\bbbb.gcode', 'w') as fout:
    for line in fin:
        if line.startswith('G00'):
            fout.write(line[:-1] + ' Z0.3' + '\r')
        else:
            fout.write(line)
Result:
# start of file
some text
other text

# more text
G1 X1 Y1
G1 X2 Y2
# other text
G1 X3 Y3
G1 X4 Y4

#end of file
  1. 连接字符串-如果行以G00开头,则添加Z0.3
Code:
    with open(r'C:\gcode\aaaa.gcode', 'r') as fin, open(r'C:\gcode\bbbb.gcode', 'w') as fout:
        for line in fin:
            if line.startswith('G00'):
                fout.write(line[:-1] + ' Z0.3' + '\r')
            else:
                fout.write(line)
Result
# start of file
some text
other text

# more text
G00 X1 Y1 Z0.3
G00 X2 Y2 Z0.3
# other text
G00 X3 Y3 Z0.3
G00 X4 Y4 Z0.3

#end of file

我尝试了以下代码的各种分支,但始终收到以下错误消息:

with open(r'C:\gcode\aaaa.gcode', 'r') as fin, open(r'C:\gcode\bbbb.gcode', 'w') as fout:
    for line in fin:
        if line.startswith('G00'):
            fout.write(line[:-1] + ' Z0.3' + '\r')
            fout = fout.replace('G00', 'G1')   # newly added line
        else:
            fout.write(line)
AttributeError: '_io.TextIOWrapper' object has no attribute 'replace'
Questioner
Muldoon
Viewed
0
Daweo 2020-12-02 23:53:19

你正在尝试.replace对文件句柄进行操作-这没有意义,line例如,你应该对它进行处理:

with open(r'C:\gcode\aaaa.gcode', 'r') as fin, open(r'C:\gcode\bbbb.gcode', 'w') as fout:
    for line in fin:
        line = line.replace('G00', 'G1')
        if line.startswith('G00'):
            fout.write(line[:-1] + ' Z0.3' + '\r')
        else:
            fout.write(line)

还请注意,当且仅当行以-\r分隔时,你的代码才能正常工作