Python线条分为几个部分

时间:2015-07-31 07:52:08

标签: python

嗨我不确定如何解决我遇到的涉及分裂的问题。我需要读取具有以下格式的行。线条外观已使用占位符名称进行更改,以便于阅读。

/etc/xxx/gainValueX       S32         5, 4, 3, 2, 1, 6, 7, 10

我的目标是将线的一部分分成三个不同的变量。一个用于“/ etc / xxx / ...”部分,一个用于“S32”部分,一个用于该行中的所有数字。问题是带有数字的部分用逗号分隔,而其他部分只有它们之间有空格。

这是我的代码到目前为止的样子

for line in ins:¨
        pieces = line.split()
        addressParam = pieces[0]
        dataType = pieces[1]

        num = line.split(',')

        for numbers in num:
            print(numbers)

在这里,我将线分成“pieces”变量中的部分,然后我可以轻松地将行的第一部分和第二部分轻松地放入addressParam和dataType变量中,没有任何困难。问题如数字部分所述。当做testrun并打印num变量时,我不仅得到了数字,还获得了其他参数。这是一个如何运行脚本

的示例
/etc/xxx/gainValueX         S32     -393
 -368
 -174
 -68
 69
 177
 276
 374

总结一下。如何将数字正确地保存到一个变量中并且在按照我迄今为止的方式分割线之后没有其他内容?我希望我已经说清楚,问题很容易理解。

6 个答案:

答案 0 :(得分:1)

以下将为您提供列表中的所有数字

num = [x.replace(',', '') for x in pieces[2:]]
# ['5', '4', '3', '2', '1', '6', '7', '10']

你之前做的是:

num  = line.split(',')
# the output of above is
# ['/etc/xxx/gainValueX       S32         5', ' 4', ' 3', ' 2', ' 1', ' 6', ' 7', ' 10']

答案 1 :(得分:1)

以下脚本可让您访问各个部分:

import re

line = "/etc/xxx/gainValueX       S32         5, 4, 3, 2, 1, 6, 7, 10"
re_line = re.match("(.*?)\s+(.*?)\s+(.*)", line)

path = re_line.group(1)
part = re_line.group(2)
numbers = [int(x) for x in re_line.group(3).split(",")]

print "Path:", path
print "Part:", part
print "Numbers:", numbers

给你:

Path: /etc/xxx/gainValueX
Part: S32
Numbers: [5, 4, 3, 2, 1, 6, 7, 10]

在Python 2.7上测试

答案 2 :(得分:0)

由于您的号码之间有空格,因此您无法轻松执行line.split()

如果您的数据结构一致,则可以使用以下内容:

nums = "".join(line.split())[2:]

答案 3 :(得分:0)

所以你希望它分成"/etc/xxx/gainValueX", "S32", "5, 4, 3, 2, 1, 6, 7, 10"?在这种情况下,您需要line.split(None, 2)。这里的想法是在白色空间上划分通常的方式(None意味着什么),但只将它分成三个部分(两个分裂点),那就是{{{{ 1}}用于。

如果您希望将数字分开,则可以执行正常2来执行此操作,如果要删除空格(例如numbers.split(",")),则可能使用strip

答案 4 :(得分:0)

您应该使用两个步骤:

  1. 按空格划分,然后
  2. 将逗号分隔为空格后分别分割数字
  3. 以下是基于上述输入的示例:

    #!/usr/bin/env python
    
    while True:
        try:
            line = raw_input('Input? ')
            parts = line.split(' ',2)
            print "Parts:"
            for x, part in enumerate(parts):
                print "  %d: %s" % (x, part)
    
            numbers = parts[2].replace(',', ' ').split()
            print "Numbers:"
            for x, num in enumerate(numbers):
                print "  %d: %s" % (x, num)
        except:
            break
    

    以下是示例运行:

    $ ./test.py
    Input? foo bar 1, 2,3 , 4,5
    Parts:
      0: foo
      1: bar
      2: 1, 2,3 , 4,5
    Numbers:
      0: 1
      1: 2
      2: 3
      3: 4
      4: 5
    

答案 5 :(得分:-2)

只需创建字符串然后打印即可。将换行符打印到字符串末尾,为什么不这样做

for line in ins:
    pieces = line.split()
    addressParam = pieces[0]
    dataType = pieces[1]

    num = ''.join(pieces[2:]).split(',')
    for number in num:
        print number

num变量现在只包含数字。