如何匹配浮点数并将逗号替换为点?

1 投票
4 回答
3565 浏览
提问于 2025-04-18 11:05

我有一个文本文件,里面包含了几种不同类型的数字:整数、二进制和浮点数。我想只匹配浮点数,并把其中的逗号替换成点。

我的文本文件的例子(顺序是随意的):

1000101 33434,34 1992 [3,41,4,5] 

转换后的结果:

1000101 33434.34 1992 [3,41,4,5] 

我的代码是:

lines = []
in_file = open("input.txt", "r")
for line in in_file:
    line = line.split(" ")
    for x in line:
        try:
            if isinstance(float(x.replace(',', '.')), float):
                line[line.index(x)] = float(x.replace(',', '.'))
        except:
            pass
    lines.append(line)
in_file.close()

但是这样会把其他数据也转换成浮点数,那有什么好的方法来解决这个问题呢?
我想过用 regex(正则表达式),但我不知道在Python中该怎么做。

4 个回答

1

这个应该对你有用:

lines = []
in_file = open("input.txt", "r")
for line in in_file:
    line = line.split(" ")

    for x in line:
        tmp = eval(x)
        if isinstance(tmp, tuple):
            line[line.index(x)] = float(float(x.replace(',', '.')))
        else:
            line[line.index(x)] = tmp

    lines.append(line)
in_file.close()

它会把所有东西转换成正确的类型

1

如果你所有的字符串格式都一样,你可以只替换第一个出现的,

s = "1000101 33434,34 1992 [3,41,4,5]"

print re.sub(",",".",s,1)
1000101 33434.34 1992 [3,41,4,5]
1

试试这个:

import re
from ast import literal_eval

FLOAT_RE = re.compile('^\d+,\d+$')

lines = []
with open("input.txt", "r") as in_file:
    for line in in_file:
        line = line.strip().split(" ")
        for x in line:
            i = line.index(x)
            if FLOAT_RE.match(x):
                x = x.replace(',', '.')
            line[i] = literal_eval(x)
        lines.append(line)

print lines
3

还有一种方法,可以使用正则表达式:

import re
with open('input.txt', 'r+') as f:
    newf = re.sub(r'(\s+[+-]?[0-9]+),([0-9]+\s+)',r'\1.\2', f.read())
    f.seek(0)
    f.write(newf)

测试文件:

1000101 33434,34 1992 [3,41,4,5] 
12,43 129012 91 [1,2]
1000101 33434,34 1992 [3, 41,4,5] 

结果:

1000101 33434.34 1992 [3,41,4,5] 
12.43 129012 91 [1,2]
1000101 33434.34 1992 [3, 41,4,5] 

撰写回答