将数据列表解析为python中的列表

时间:2016-01-26 08:52:15

标签: python list split strip

我有一个包含以下格式的数字的文本文件:

 {5.2, 7.3}
 {1.4, 6.2}

我想将这些加载到一个浮点列表中,该浮点列表包含两列和与文件中的条目相同的行数,例如[[5.2, 7.3], [1.4, 6.2], ...]

目前我正在这样做:

f = open(filename,'r')

mylist = []


for line in f:

    strippedLine = line.strip('{}\n')
    splitLine = strippedLine.split(',')
    a=float(splitLine[0])
    b=float(splitLine[1])
    ab=np.array([a,b])
    mylist.append(ab)


f.close()

这很好用,但我想摆脱for循环,即只使用split,strip和float。像这样:

f = open(filename,'r')
lines = f.read()
f.close

split_lines = lines.split('\n')
# Then something more here to get rid of { and }, and to rearrange into the shape I want

我可以用[和]替换{和},然后尝试将其转换为列表吗?

2 个答案:

答案 0 :(得分:4)

您可以执行一些简单的字符串替换,然后使用sapply(ab, mean, na.rm = TRUE) # antibiotic1 antibiotic2 antibiotic3 # 0.625 0.250 0.375

ast.literal_eval

或者在文件上使用str.join来获取正确位置的逗号:

>>> data = "{5.2, 7.3}\n{1.4, 6.2}\n"
>>> import ast
>>> ast.literal_eval(data.replace('{','[').replace('}',']').replace('\n',','))
([5.2, 7.3], [1.4, 6.2])
>>> 

答案 1 :(得分:2)

另一种方法怎么样,它不使用替换和评估(有些冒险),而是使用正则表达式。它确实违反了你的#34; no for loop"虽然规则:

return Rx.Observable
   .interval(1000)
   .flatMapLatest(() => this.http.get(`${AppSettings.API_ENDPOINT}/messages`))
   .map(response => response.json())
   .map((messages: Object[]) => {
      return messages.map(message => this.parseData(message));
   });