如何在拆分时获取Python中包含浮点数,字符串和特殊字符的列表的最后一部分?

时间:2016-11-16 20:22:49

标签: python

我需要获取使用readlines()获取的列表的最后一部分。这是字符串/列表的一部分:

['Some Name__________2.0 2.0 1.3\n', 'Some Name__________1.0 9.0 1.0\n', # and so on....]

我只想获取数字并忽略其余部分,但我该怎么做?所以我想要这个:

2.0 2.0 1.3

要获取名称部分,我知道我需要使用split("_")并使用索引来获取它...

但是当我尝试获取数字时,我失败了,因为它只是在控制台中没有输出任何内容。

这是获取名称的代码:

def openFile():
    fileFolder = open('TEXTFILE', 'r')
    readFile = fileFolder.readlines()

    for line in readFile:
        line = line.split("_")

        personNames = line[0]

        print personNames

print openFile()

我认为使用line[2]line[3]也足以获得数字,但它不是。有人可以向我解释为什么这不起作用,如何我可以使用我的代码而不是导入内容?

是否有类似于范围或类似东西的东西可以说split()只是为了得到它的最后一部分?

3 个答案:

答案 0 :(得分:2)

根据您的上一个问题,您还没有摆脱此解决方案中的空字符串。因此,line[2]line[3]无法正常工作,因为它们可能是最初为空的字符串: readFile = ['Some name____2.0 2.1 1.3','Some other name_____2.2 3.4 1.1']

这是我将如何做到的:

def openFile():
    readFile = ['Some name____2.0 2.1 1.3\n','Some other name_____2.2 3.4 1.1\n']

    data=[]

    for line in readFile:
        line = (line.rstrip()).split("_") #EDIT: Strip the newline character in this line
        data.append(line [-1].split(' '))

    print(data)

openFile()

答案 1 :(得分:2)

blah=['name____2.0 2.0 1.3\n', 'aaahha____1.0 9.0 1.0\n', 'fasdkflj_________2 3 9.2']
blah2=[b.split('_')[-1].strip() for b in blah]

输出:

['2.0 2.0 1.3', '1.0 9.0 1.0', '2 3 9.2']

如果您想要实际数字而不是包含数字的字符串,则可以使用.split(' ')将此输出中的每个项目拆分。

答案 2 :(得分:1)

l = ['Some Name__________2.0 2.0 1.3\n', 'Some Name__________1.0 9.0 1.0\n']

names = []
numbers = []
for line in l:
    line = line.strip().replace("_", " ").split()
    names.append(line[0] + " " + line[1])
    for s in line:
        try:
            numbers.append(float(s))
        except ValueError:
            pass
print(names)
print(numbers)
# ['Some Name', 'Some Name']
# [2.0, 2.0, 1.3, 1.0, 9.0, 1.0]

但FTW:

import re
l = ['Some Name__________2.0 2.0 1.3\n', 'Some Name__________1.0 9.0 1.0\n']
print([re.findall("[-+]?\d+[\.]?\d*[eE]?[-+]?\d*", s) for s in l])