我有一个与此类似的文本文件:
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.loadtxt
或numpy.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
答案 0 :(得分:2)
试试这个,D是一个字典,然后每一行将使用其第一个字母作为键,列表的其余部分作为值。
return Json(new UrlHelper(this.Request.RequestContext).Content("~/img/Post/" + fileName ), JsonRequestBehavior.AllowGet);
这应该做你想要的。