注解
Click here to download the full example code
读写地震数据¶
本节简单介绍如何利用 ObsPy 读写地震波形数据、地震目录和元数据。
import glob
import obspy
读写波形数据¶
ObsPy 利用 read()
函数将各种格式的地震数据(如 SAC、MiniSEED 等)读入 Stream
中。
每个 Trace
都包含指向连续时间序列的 data
属性和指向所有元数据的 stats
属性。例如,starttime
和 endtime
等元数据都以字典形式储存在 Stats
对象中。
经过处理后,可以用 write()
方法将数据保存到本地。
下面举例说明:
从服务器读取波形数据并写入到本地文件
tr = obspy.read() # 从服务器读取波形数据示例文件到 Stream 对象中
print(tr) # 打印 Stream 对象信息
tr.write("test.mseed") # 将波形数据保存到本地,可通过后缀名确定文件类型
Out:
3 Trace(s) in Stream:
BW.RJOB..EHZ | 2009-08-24T00:20:03.000000Z - 2009-08-24T00:20:32.990000Z | 100.0 Hz, 3000 samples
BW.RJOB..EHN | 2009-08-24T00:20:03.000000Z - 2009-08-24T00:20:32.990000Z | 100.0 Hz, 3000 samples
BW.RJOB..EHE | 2009-08-24T00:20:03.000000Z - 2009-08-24T00:20:32.990000Z | 100.0 Hz, 3000 samples
从本地读取地震波形数据并转换格式存储到本地
for file in glob.glob('*.sac'): # 遍历当前目录中以 ".sac" 结尾的文件
st = obspy.read(file) # 将数据读取到以 st 命名的 Stream 对象中
tr = st[0] # 把 Stream 对象中的第一个 Trace 赋予变量 tr
# 打印头段变量和经过处理的波形数据
msg = "%s %s %f %f" % (tr.stats.station, str(tr.stats.starttime),tr.data.mean(), tr.data.std())
print(msg)
print(tr.stats) # 打印元数据
# tr.write(file+".mseed", format="mseed") # 以 mseed 格式存储至本地
print("===================================================\n")
读写地震目录¶
利用 read_events()
函数读取地震目录到 Catalog
对象,然后通过 write()
方法保存到本地。
cat = obspy.read_events() # 从服务器读取地震目录示例文件
print(cat) # 打印地震目录信息
cat.write('events', format='kml') # 以 kml格式存储至本地
Out:
3 Event(s) in Catalog:
2012-04-04T14:21:42.300000Z | +41.818, +79.689 | 4.4 mb | manual
2012-04-04T14:18:37.000000Z | +39.342, +41.044 | 4.3 ML | manual
2012-04-04T14:08:46.000000Z | +38.017, +37.736 | 3.0 ML | manual
读写元数据¶
可以通过 read_inventory()
函数读取元数据到 Inventory
对象,然后利用 write()
方法将元数据保存到本地。
inv = obspy.read_inventory() # 从服务器读取元数据示例文件
print(inv) # 打印元数据信息
inv.write('inv.pz', format='sacpz') # 以 pz 格式存储至本地
Out:
Inventory created at 2014-03-03T11:07:06.198000Z
Created by: fdsn-stationxml-converter/1.0.0
http://www.iris.edu/fdsnstationconverter
Sending institution: Erdbebendienst Bayern
Contains:
Networks (2):
BW, GR
Stations (5):
BW.RJOB (Jochberg, Bavaria, BW-Net) (3x)
GR.FUR (Fuerstenfeldbruck, Bavaria, GR-Net)
GR.WET (Wettzell, Bavaria, GR-Net)
Channels (30):
BW.RJOB..EHZ (3x), BW.RJOB..EHN (3x), BW.RJOB..EHE (3x),
GR.FUR..BHZ, GR.FUR..BHN, GR.FUR..BHE, GR.FUR..HHZ, GR.FUR..HHN,
GR.FUR..HHE, GR.FUR..LHZ, GR.FUR..LHN, GR.FUR..LHE, GR.FUR..VHZ,
GR.FUR..VHN, GR.FUR..VHE, GR.WET..BHZ, GR.WET..BHN, GR.WET..BHE,
GR.WET..HHZ, GR.WET..HHN, GR.WET..HHE, GR.WET..LHZ, GR.WET..LHN,
GR.WET..LHE
删除临时文件
import os
os.remove("test.mseed")
os.remove("events.kml")
os.remove("inv.pz")
Total running time of the script: ( 0 minutes 0.200 seconds)