处理包含列表和无值的文本文件

时间:2016-09-06 13:25:13

标签: python csv numpy

我有一个与此类似的文本文件:

a, 1, 2.5, 3
b, 1, 1, 1 1 2 3 4, 1 2, 3
c 1, 2, 2, 2, 2, None, 2

简而言之,每一行都以其名称开头,后跟可变数量的浮点数或由逗号分隔的浮点数列表,一些浮点数可以是无值。 我想解析它以获得类似于词典D

的东西
D['a']=[1,2.,3]
D['b']=[1,1,[1,1,2,3,4],[1,2],3]
D['c']=[1,2,2,2,2,None,2]

基本上我可以使用numpy.loadtxtnumpy.genfromtxt并使用他们的选项,但genfromtxt的每行中的列数不同,或者有字符串值。
csv模块很有用,但仍需要对生成的行进行工程设计 我是否需要使用IO stream / csv并手动执行此操作,或者是否有一些干净的pythonic方法? 现在,我丑陋的解决方案看起来像这样:

import csv
f=open("text.txt","rb")
reader=csv.reader(f)
D={}
for row in reader:
  if len(row)!=0:
    if row[0]=="a":
      D["a"]=row[1:]
    elif row[0]=="b":

等等,但现在我必须解析转换字符串到数字和列表和浮动。

编辑1 随着@Daniel Lee的回答以及这篇写得不好的黑客行为它的确有效,但显然我做得不对:

def convert list_to_float(L):
  s=[None]*len(L)       
  for index, l in enumerate(L):
    if len(l.split())>1:
        s[index]=[float(e) for e in l.split()]
    elif 'None' in l:
        s[index]=None
    else:
        s[index]=float(l)
  return s

1 个答案:

答案 0 :(得分:2)

试试这个,D是一个字典,然后每一行将使用其第一个字母作为键,列表的其余部分作为值。

return Json(new UrlHelper(this.Request.RequestContext).Content("~/img/Post/" + fileName ), JsonRequestBehavior.AllowGet);

这应该做你想要的。