【问题标题】:"Value error: Mixing iteration and read methods would lose data "message while extracting numbers from a string from a .txt file using python“值错误:混合迭代和读取方法会丢失数据”消息,同时使用 python 从 .txt 文件中的字符串中提取数字
【发布时间】:2015-10-02 22:29:28
【问题描述】:

我有一个程序从.txt 文件中获取数字并将其放入array。问题是这些数字不是孤立的有序的.txt 文件如下所示:

G40 Z=10
A=30 X10 Y50
A=30 X40 Y15
A=50 X39 Y14
G40 Z=11
A=30 X10 Y50
A=30 X40 Y15
A=50 X39 Y14

输出应该是具有以下数组格式的新.txt 文件

X Y Z
10 50 10
40 15 10
39 14 10
10 50 11
40 15 11
39 14 11

这是我到目前为止所做的,虽然我不确定如何将输出写入新文件...

inputfile = open('circletest1.gcode' , 'r')
def find_between( s, first, last ):
      try:
          start = s.index( first ) + len( first )
          end = s.index( last, start )
          return s[start:end]
      except ValueError:
          return ""
for i in range(203): inputfile.next() # skip first 203 lines
while True:
    my_text = inputfile.readline()
    z = find_between(my_text, "Z =", " ")
    x = find_between(my_text, "X", " ")
    y = find_between(my_text, "Y", " ")
    print(x ," ", y, " ", z)
    if not my_text:break

inputfile.close()

有一段时间我收到缩进错误,但我相信我已经解决了这个问题。现在我收到的错误消息是“值错误:混合迭代和读取方法会丢失数据”。

我不确定从这里去哪里,也不确定如何将我的结果导入另一个单独的新 txt 文件。

另外,在我的代码中,有没有办法在循环之外保留 z 值,直到分配新的 z 值?

【问题讨论】:

    标签: python arrays string parsing


    【解决方案1】:

    如果我理解正确,您希望将以G 开头的行中的Z 值与以下行中的XY 值组合在一起(直到下一行G)。

    如果是这样,我将使用单个循环,仅在以A 开头的行上打印,并在以G 开头的行上保存新的Z 值。我会用正则表达式进行行解析,但如果你愿意,你可以使用简单的字符串操作(我会split,然后跳过相关项目的第一个或多个字母)。

    import itertools
    import re
    
    z = None
    
    with open('circletest1.gcode') as input_file:
        for line in itertools.islice(203, None):  # islice to skip the first 203 lines
            if line.startswith("G"):
                z = re.search(r"Z=(\d+)", line).group(1)
            elif line.startswith("A"):
                x, y = re.search(r"X(\d+) Y(\d+)", line).groups()
                print(x, y, z)
    

    【讨论】:

    • 谢谢!我在发布时想出了一个解决方案!现在我只是想弄清楚如何将结果导出到文件中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2013-07-03
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 2017-08-07
    • 2011-08-05
    相关资源
    最近更新 更多