【问题标题】:Python - delete strings that are float numbersPython - 删除浮点数的字符串
【发布时间】:2017-09-18 10:30:07
【问题描述】:

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

有些行包含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

【问题讨论】:

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


    【解决方案1】:

    看起来你已经把它复杂化了,一旦你把文件中的所有数字都放到了一个列表中,就运行这个

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        在浮点数上执行 int() 不会出错。当您从文件中读取时,也许您的“浮点数”实际上是一个字符串,因为

        int('9.3')
        

        没用,但是

        int(9.3)
        

        会。

        编辑: 把这个函数应用到每个数字上怎么样

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

        【讨论】:

        • 这就是我无法删除浮点数的原因。
        • 如何将所有数字转换为浮点数然后转换为整数?
        • 必须保留原始号码。不允许转换为 float 然后转换为 int
        • 你可以像我的编辑一样编写一个小函数,当你有一个用逗号分隔的字符串列表时,传递你遇到的每个字符串
        【解决方案4】:

        首先,修改您正在迭代的列表是一个坏主意。一个更好的想法可能是从可以转换为 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)])
        

        【讨论】:

          【解决方案5】:

          您可以只匹配数字,然后是一个点,然后是更多数字:

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

          【讨论】:

            【解决方案6】:

            我会将数字保留为字符串,并简单地检查每个“拆分项”中是否有一个“点”来识别浮点数。

            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 ...
            

            【讨论】:

              【解决方案7】:

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

              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]

              【讨论】:

                猜你喜欢
                • 2018-06-27
                • 2016-06-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-10-09
                • 1970-01-01
                • 2019-07-10
                相关资源
                最近更新 更多