Python - 删除浮点数字符串

时间:2017-04-21 12:10:56

标签: python string python-2.7 list floating-point

我有一个包含许多行的文件,其中包含每行上由逗号,分隔的数字。

有些行包含float numbers的数字,即:['9.3']

我一直试图从列表中删除这些数字约1小时〜但没有运气。每当它试图在浮点数上使用int时,它就会出错。我不知道如何从行

中删除这些浮动数字

数字:https://pastebin.com/7vveTxjW

这是我到目前为止所做的:

with open('planets.txt','r') as f:
    lst = []
    temp = []
    for line in f:
        l = line.strip()
        l = l.split(',')
        for x in l:
            if x == '':
                l[l.index(x)] = 0
            elif x == '\n' or x == '0':
                print "removed value", l[l.index(x)]
                del l[l.index(x)]

        try:
            temp.append([int(y) for y in l])
        except ValueError:
            pass

7 个答案:

答案 0 :(得分:3)

首先,修改你正在迭代的列表是一个坏主意。更好的想法可能是从可以转换为int的元素构建新列表。

def is_int(element):
    try:
        int(element)
    except ValueError:
        return False
    return True

with open('planets.txt','r') as f:
    lst = []
    temp = []
    for line in f:
        l = line.strip().split(',')

        temp.append([int(y) for y in l if is_int(y)])

如果要包含float值'整数组件,可以执行以下操作:

def is_float(element):
    try:
        float(element)
    except ValueError:
        return False
    return True

with open('planets.txt','r') as f:
    lst = []
    temp = []
    for line in f:
        l = line.strip().split(',')

        temp.append([int(float(y)) for y in l if is_float(y)])

答案 1 :(得分:0)

看起来你过度复杂了,一旦你从文件中获得所有数字到列表就运行这个

numbers=["8","9","10.5","11.1"]
intList=[]
for num in numbers:
    try:
        int_test=int(num)
        intList.append(num)
    except ValueError:
        pass

只需将我的号码列表更改为您的列表名称

答案 2 :(得分:0)

当您获得包含数字的列表(例如,['1','2.3','4.5','1.0'])时,您可以使用以下

intDigits = [ i for i in digits if float(i) - int(float(i)) == 0]

答案 3 :(得分:0)

在float上执行int()不应该给出错误。也许你的漂浮'实际上是一个字符串,因为你正在从文件中读取,因为

int('9.3')

不起作用,但

int(9.3)

确实

编辑: 如何将此功能应用于每个数字

def intify(n):
    if n == '':
        return n
    try:
        return int(n)
    except ValueError:
        return int(float(n))

答案 4 :(得分:0)

您可以匹配数字后跟一个点后跟更多数字:

import re

output_list = []
input = open('input.txt', 'r')
for line in input:
    if '.' not in line:
        output_list.append(line)
    else:
        output_list.append(re.sub(r"(\d+\.\d+)", '', line))
        print("Removed", re.search(r"(\d+\.\d+)", line).group(1))

答案 5 :(得分:0)

我会将数字保留为字符串,只需检查是否有点'在每个拆分项目中#39;识别花车。

with open('planets.txt','r') as f:
    for line in f:
        line = ','.join([item for item in line.strip().split(',') if not '.' in item])
        print(line)
        # ... write to file ...

答案 6 :(得分:0)

如果您只需要删除浮动,这对我来说是最简单的方法。

mixed = [1,float(1),2,3,4.3,5]

ints = [i for i in mixed if type(i) is not float]

结果:[1, 2, 3, 5]