python不同数据类型文件读取与写出(暂时更新完毕)

Posted on 2022-03-05  1094 Views


1.dat文件

此类型文件读取需要原文件按数据位数严格排版,不然会出现严重错误。

f=open('D:/HARBO/table1.dat')
note=f.readlines()
b=[x[29:33] for x in note]
c=[x[34:38] for x in note]
d=[x[39:40] for x in note]

需注意,python第一列的编码从0开始,因此要读取第30列到第31列的话需要输入 [29:31] ,前一个数为起始列数-1,后一个数为结束列数。 [29:33] 读取的就是30~33列。

2.csv文件

csv文件的读取需要用到一个python扩展包:pandas

import pandas as pd
data = pd.read_csv("D:\OB starlist\origin catalog\NVSS\star catalog.csv")

在读取完整体表格后,可以依据每一列数据的表头再分别读取不同列

OBSID = data["OBSID"]
RA = data["RA"]
DEC = data["DEC"]
SNR = data["SNR"]

读取出来的数据列RA,DEC等都会作为list存在,而其中的数据存储格式为str,如果要对其中的数据进行计算则需要额外用float进行一次数据变化。

# 写出星表
dataframe = pd.DataFrame({'OBSID':OBSID ,'RA':RA ,'DEC':DEC ,'SNR':SNR })
#将DataFrame存储为csv,index表示是否显示行名,default=True
dataframe.to_csv("D:\OB starlist\LRS_M.csv",index=False,sep=',')

要将数据存储为csv文件,需要以 'OBSID':OBSID 这样的格式为例,一个列头(列的名字)对应一列数据,并且不同列的数据数量应该相同。

3.fits文件

fits文件处理相对较为麻烦,但在topcat中读取相较csv文件更加快速

from astropy.io import fits

#提取需要的行
hdul=fits.open("D:\\benji\\lamost_dr5_gaia_dr2_stripe82.fits")
table=hdul[1].data
ra=fits.Column(name='ra_obs', array=table.field(8), format='D')
dec=fits.Column(name='dec_obs', array=table.field(9), format='D')

#写出为新的fits文件
new_tab = fits.BinTableHDU.from_columns([ra,dec])
new_tab.writeto('D:\\benji\\lamost_dr5_gaia_dr2_stripe82 new.fits')

可以看出,fits文件的读取是按列数读取的,而其写出也是按列写出出来


正恰提灯映山河