Python loadtxt和genfromtxt截断字符串

2024-09-30 01:33:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个2列数组混合类型数组,我需要读入该数组并将其重塑为数据立方体。我大部分时间都在工作,但出于某种原因两者兼而有之加载数.txt以及np.genfromtxt删除元组字符串部分第8个字符之后的所有内容。我有25个由8个参数值对组成的块,对应于质量和金属度不同的恒星。例如,Teff\t\t 5.2739E+3(字符串和float之间有2个制表符)可以很好地转换为键值对,但是MASS/MSUN \t\t 0.800转换为'MASS/MSU':0.800,而不是我预期的{}。类似地,LOG(L/LSUN) \t\t 0.0522变成{},而不是{} 为什么字符串中的最后一个字符会脱落? 我不喜欢在每一行和每行之间加上分隔符。我必须声明一个字符串子类型。我已经解决了一个问题,这让我很困扰。在

这是我的代码(我使用的是Spyder GUI,顺便说一句):

>>>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)

Tags: 字符串intxtlog类型np数组float
1条回答
网友
1楼 · 发布于 2024-09-30 01:33:33

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

相关问题 更多 >

    热门问题