我需要获取使用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()只是为了得到它的最后一部分?
答案 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])