首页 > 解决方案 > 使用python将ascii转换为sac

问题描述

我正在尝试使用 python 将 ASCII 文件转换为 sac 文件格式。我所做的是读取 ASCII 文件并使用 numpy 将其转换为浮点数组。

定义标题后,我将浮点数组保存为 Sac 格式。当打开如此生成的带有./sac标题的 Sac 文件并打印标题时,部分标题,即事件和站的坐标没有列出。

显然,我在定义标题时做错了,但我不知道如何以另一种方式定义标题......所以如果有人有任何想法或提示,我会很高兴!

提前致谢!:)

这是我所做的:

import numpy as np
from obspy import UTCDateTime, read, Trace, Stream
import pandas as pd
import os

x = pd.read_csv('Test', header=1, na_values='-')
x1 = x.to_numpy()
stats = {
    'network': 'B',
    'station': 'XXX',
    'channel': 'Z',
    'npts': len(x1),
    'sampling_rate': 50,
    'delta': '0.02',
    'b': '0',
    'stla': 87.0000,
    'stlo': 2.000,
    'evla': 16.000,
    'evlo': 7.000,
    'nzyear': '2017',
    'nzjday': '001',
    'nzhour': '00',
    'nzmin': '00',
    'nzsec': '00',
    'nzmsec':'000',
    'mseed': {'dataquality': 'D'}
} 
stats['starttime']= '2017-01-01T00:00:00.000000Z'
x2 = x1[0:].reshape((len(x1),))

st = Stream([Trace(data=x2, header=stats)])
st.write("Test.sac", format='SAC')

标签: pythonascii

解决方案


我认为这可能有助于解决问题:

https://lists.swapbytes.de/archives/obspy-users/2015-November/001901.html

换句话说,如果您以这种方式编写代码,作为快速更正:

import numpy as np
from obspy import UTCDateTime, read, Trace, Stream
import pandas as pd
import os

x = pd.read_csv('Test', header=1, na_values='-')
x1 = x.to_numpy()
stats = {
    'network': 'B',
    'station': 'XXX',
    'channel': 'Z',
    'npts': len(x1),
    'sampling_rate': 50,
    'delta': '0.02',
    'b': '0',
    'stla': 87.0000,
    'stlo': 2.000,
    'evla': 16.000,
    'evlo': 7.000,
    'nzyear': '2017',
    'nzjday': '001',
    'nzhour': '00',
    'nzmin': '00',
    'nzsec': '00',
    'nzmsec':'000',
    'mseed': {'dataquality': 'D'}
} 
stats['starttime']= '2017-01-01T00:00:00.000000Z'
x2 = x1[0:].reshape((len(x1),))
st = Stream([Trace(data=x2, header=stats)])


for tr in st:
    tr.stats.sac = obspy_to_sac_header(tr.stats)
    tr.stats.sac.stla = 87.0000
    tr.stats.sac.stlo = 2.000
    
tr.write("Test.sac", format='SAC')


推荐阅读