如何从文件中读取负数?

0 投票
2 回答
1203 浏览
提问于 2025-04-18 02:12

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

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

我写了一个程序,运行得很好,但对负整数不行..!! 请帮帮我,我是Python新手...

2 个回答

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

注意那个 -? 的部分。它让你可以在数字前面加一个可选的连字符。

撰写回答