簡體   English   中英

將浮點數與逗號匹配,然后將逗號替換為點號?

[英]match float with comma and then replace comma with dot?

我有一個文本文件,其中包含一些不同類型的數字:整數,二進制和浮點數。 我只想匹配浮點數,並用點替換逗號。

我的文本文件示例(順序是隨意的):

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中進行。

另一種使用正則表達式的方法:

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] 

嘗試這個:

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

這應該為您工作:

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()

它將所有內容轉換為正確的類型

如果您的所有字符串都可以分僅第一次出現相同的格式,

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM