如何从文件中读取负数?

时间:2014-04-10 13:48:17

标签: python arrays

我有一个包含这样的字符串的文件:

  

N7300 X-7.254 Y-40.839 A-89.74

     

N7301 X-7.002 Y-40.847 A-89.806

     

N7302 X-6.75 Y-40.855 A-89.873

     

N7303 X-6.511 Y-40.862 A-89.926

     

N7304 X-6.272 Y-40.868 A-89.979

粗体字符串有负数。我不知道如何从文件中读取这些数字。

我想生成这样的输出:

  

[(' N',' 7300'),(' X',' -7.254'),( ' Y',' -40.839')。 。 ]

import re
import sys
with open(r'/home/ruchir/Desktop/NewFolder/TEST.txt') as f:
    lines=f.readlines()
    lines=''.join(lines)
    lines=lines.split()
    a=[]

    for i in lines:
        match=re.match(r"([a-z]+)([0-9]*\.?[0-9]+)",i,re.I)
        if match:
            a.append(match.groups())
            print a

我写的这个程序运行正常但不适用于负整数.. !! Plzz帮助我,我是Python的新手......

2 个答案:

答案 0 :(得分:2)

尝试这样的事情:

result=re.findall(r"([a-z]+)(-?[0-9]*\.?[0-9]+)","N7303 X-6.511 Y-40.862 A-89.926",re.I)
print result

导致:

[('N', '7303'), ('X', '-6.511'), ('Y', '-40.862'), ('A', '-89.926')]

请注意-?位。它在数字之前可以使用可选的连字符。

答案 1 :(得分:1)

我会沿着这些方向做点什么:

contents='''\
N7300 X-7.254 Y-40.839 A-89.74
N7301 X-7.002 Y-40.847 A-89.806
N7302 X-6.75 Y-40.855 A-89.873
N7303 X-6.511 Y-40.862 A-89.926
N7304 X-6.272 Y-40.868 A-89.979'''

import re

pat=re.compile(r'(?:(\w)([-+]?[0-9]*\.?[0-9]+))')

for line in contents.splitlines():
    ld=[ m.groups() for m in pat.finditer(line)]
    print ld

打印:

[('N', '7300'), ('X', '-7.254'), ('Y', '-40.839'), ('A', '-89.74')]
[('N', '7301'), ('X', '-7.002'), ('Y', '-40.847'), ('A', '-89.806')]
[('N', '7302'), ('X', '-6.75'), ('Y', '-40.855'), ('A', '-89.873')]
[('N', '7303'), ('X', '-6.511'), ('Y', '-40.862'), ('A', '-89.926')]
[('N', '7304'), ('X', '-6.272'), ('Y', '-40.868'), ('A', '-89.979')]