Python行拆分为部分

2024-04-26 14:42:07 发布

您现在位置: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

总结一下。我如何正确地保存到一个变量的数字,而不是其他后分裂行的方式,我已经做了吗?我希望我已经说清楚了,这个问题很容易理解。你知道吗


Tags: infor格式lineetc数字numxxx
3条回答

因为数字之间有空格,所以不能简单地执行line.split()

如果数据结构一致,可以使用以下方法:

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

下面将给出一个列表中的所有数字

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']

以下脚本将允许您访问各个部分:

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]

在Python2.7上测试

相关问题 更多 >