Python loadtxt和genfromttxt截断字符串



我有一个2列数组混合类型数组,需要读入并将其重塑为数据立方体。我已经完成了大部分工作,但出于某种原因,numpy.loadtxt和np.genfromttxt都会删除元组字符串部分第8个字符之后的所有内容。我有25个块,8个参数值对,对应于质量和金属含量不同的恒星。例如,Teff tt 5.2739E+3(字符串和浮点值之间有两个选项卡)可以很好地转换为键值对,但MASS/MSUN tt 0.800会像我预期的那样转换为'MASS/MSU':0.800而不是'MASS/MSUN':0.800。类似地,LOG(L/LSUN) tt 0.0522变成'LOG(L/LS': 0.0522而不是'LOG(L/LSUN)': 0.0522为什么字符串中的最后一个字符会脱落?我试着将分隔符设置为仅制表符、仅制表符和换行符(似乎不喜欢这样),注释掉块之间的行,等等。似乎无论我做什么,每个字符串的字符限制都是8。我必须声明一个字符串子类型。我做了一个变通办法,这让我很困扰。

这是我的代码(我使用的是Spyder GUI,BTW):

>>>f=np.genfromtxt("zamsdata.txt",dtype=(str,float))
>>>zcube = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
>>>infotups=[]
>>>for row in f:
>>>    if 'MASS' in row[0]:
>>>        mass=str(row[1])
>>>        continue #rows are in repeating order of MASS, X, Y, Pc, Tc, R, L, Te, LOG(Te) & LOG(L/LSUN)
>>>    if 'X' in row[0]:
>>>        hydfrac=str(row[1])
>>>        continue
>>>    else:
>>>        infotups=infotups+[[hydfrac,mass,str(row[0]),row[1]]]
>>>        
>>>for l,m,a,o in infotups:
>>>    zcube[l][m][a].append(o)

当字段的数据类型被指定为str时,genfromtxt分配给字段的默认大小似乎是八个字符。如果您知道最大字符数是12,那么可以使用dtype=['S12', float]。(请注意,我使用的是列表,而不是元组。)您也可以使用dtype=None,它告诉genfromtxt根据它在文件中找到的内容来计算每个字段的数据类型。

相关内容

  • 没有找到相关文章

最新更新