我正在尝试从这里读取原子质量和其他信息的文件。我正在使用
pandas.read_csv
来完成此任务。目前我的阅读代码看起来像这样:
#importing isotope masses
#see: https://www-nds.iaea.org/amdc/
masses = pd.read_csv('isotope_data/mass_1.mas20.txt', skiprows=36,skipfooter=2, \
names=['1N', '-Z','N','Z','A','EL','0','Delta','eDelta','BE','eBE',\
'DC','BeE','eBeE','AMU','AMU2','eAMU'],sep='\s+',engine='python')
print (masses.head(100))
(注意:这个调用不太正确,因为数据没有正确排列,我正在处理那部分) 这可能会工作正常,但输入文件的好处之一是,它在我的文本文件的注释部分中给出了所有输入行的特定格式语句:
col 1 : Fortran character control: 1 = page feed 0 = line feed
format : a1,i3,i5,i5,i5,1x,a3,a4,1x,f14.6,f12.6,f13.5,1x,f10.5,1x,a2,f13.5,f11.5,1x,i3,1x,f13.6,f12.6
不幸的是,我认为这种格式信息只能在 FORTRAN 中直接使用。有没有办法读取此格式信息并将其应用于我的
read_csv
调用,以便我为每个变量获得正确的格式?
也许这部分与我设想在调用后使用的数据结构有关。通常,我所做的是将生成的 Pandas 数据帧中的每条数据投影到 numpy 数组中,因为我更喜欢使用这些数据。
我建议使用
fortranformat
包。以下解析器处理固定长度字段以及 # 和 * 字符:
import fortranformat as ff
format = ff.FortranRecordReader('(a1,i3,i5,i5,i5,1x,a3,a4,1x,f14.6,f12.6,f13.5,1x,f10.5,1x,a2,f13.5,f11.5,1x,i3,1x,f13.6,f12.6)')
f = open('mass_1.mas20.txt', 'r')
masses = []
count = 0
while True:
line = f.readline()
if line:
count = count + 1
if count > 36:
masses.append(format.read(line.replace('*', ' ').replace('#', '.')))
else:
break
f.close()
print (masses[:100])