2017-03-01 91 views
0

* .savファイルの内容をPythonの* .csvファイルに変換したいと考えています。 * .savファイルの変数の詳細にアクセスするために、次のコード行を記述しました。.savファイルをPythonの.csvファイルに変換する

IDL Save file is compressed 
-> expanding to /var/folders/z4/r3844ql123jgkq1ztdr4jxrm0000gn/T/tmpVE_Iz6.sav 
-------------------------------------------------- 
Date: Mon Feb 15 20:41:02 2016 
User: zhangy1 
Host: augur 
-------------------------------------------------- 
Format: 9 
Architecture: x86_64 
Operating System: linux 
IDL Version: 7.0 
-------------------------------------------------- 
Successfully read 11 records of which: 
- 7 are of type VARIABLE 
- 1 are of type TIMESTAMP 
- 1 are of type NOTICE 
- 1 are of type VERSION 
-------------------------------------------------- 
Available variables: 
- saved_data [<class 'numpy.recarray'>] 
- on2_grid_smooth [<type 'numpy.ndarray'>] 
- d_lat [<type 'numpy.float32'>] 
- on2_grid [<type 'numpy.ndarray'>] 
- doy [<type 'str'>] 
- year [<type 'str'>] 
- d_lon [<type 'numpy.float32'>] 
-------------------------------------------------- 

:今、私は上記のコード行を実行したときの結果である次のヘッダー

import scipy.io as spio 
on2file = 'ON2_2015_112m_220415.sav' 
on2data = spio.readsav(on2file, python_dict=True, verbose=True) 

と.csvファイルにアクセスし、変数データを書き込むことができます方法については明確ではありませんよ誰も私がどのように.csvファイルにすべての変数のデータを書くことができると私を提案することができますか?

私は、変数(年、DOY、d_lon、d_lat、on2_grid、on2_grid_smooth)CSVまたはASCIIファイルは、次のように見えることになっている書きたい:

longitude, latitude, on2_grid, on2_grid_smooth # header 
0.0,0.0,0.0,0.0    
0.0,0.0,0.0,0.0 
0.0,0.0,0.0,0.0 
0.0,0.0,0.0,0.0 
..... 

「の形状on2_grid "と" on2_grid_smooth "変数は同じで、(101,202)です。どちらもタイプ "numpy.ndarray"です。

+0

どの変数を書きたいですか? csvはどのように見えるのですか?また、書きたいアレイの形状とdtypeも知っておく必要があります。 – hpaulj

答えて

0

私は、必要な出力形式を変更することで、私の問題を解決し、ここに私のコードである可能性があり:

import scipy.io as spio 
import numpy as np 
import csv 

on2file = 'ON2_2016_112m_220415.sav' # i/p file 
outfile = 'ON2_2016_112m_220415.csv' # o/p file 

# Read i/p file 
s = spio.readsav(on2file, python_dict=True, verbose=True) 

# Creating Grid 
#d_lat = s["d_lat"] 
#d_lon = s["d_lon"] 
lat = np.arange(-90,90,1.78218) # (101,) 
lon = np.arange(-180,180,1.78218)  # (202,) 
ylat,xlon = np.meshgrid(lat,lon) 

on2grid = np.asarray(s["on2_grid"]) 
on2gridsmooth = np.asarray(s["on2_grid_smooth"]) 

nrows = len(on2grid) 
ncols = len(on2grid[0]) 

xlon_grid = xlon.reshape(nrows*ncols,1) 
ylat_grid = ylat.reshape(nrows*ncols,1) 
on2grid_new = on2grid.reshape(nrows*ncols,1) 
on2gridsmooth_new = on2gridsmooth.reshape(nrows*ncols,1) 

# Concatenation 
allgriddata = np.concatenate((xlon_grid, ylat_grid, on2grid_new, on2gridsmooth_new),axis=1) 

# Writing o/p file 
f_handle = file(outfile,'a') 
np.savetxt(f_handle,allgriddata,delimiter=",",fmt='%0.3f',header="longitude, latitude, on2_grid, on2_grid_smooth") 
f_handle.close() 
1

あなたのコードを使用して抽出されたファイル内の緯度と経度の列を入れ替え見えます。さらに、緯度スケールは、0から180(not + 90 0 -90))... 0が上から始まっているかどうかの範囲です。 Pl。コメント。

+0

マックありがとう!私は訂正しました。 – Madhavan

0

私はそれに取り組んでいますと、一瞬のために、これは私の「貧しい」ソリューションです:

まず、私は構造化配列 第二に.SAVファイルを変換するためのモジュールsavReaderWriterをインポート私は構造化された配列を変換するモジュールnumpyのをインポートしますcsvに:

import savReaderWriter 
import numpy as np 

reader_np = savReaderWriter.SavReaderNp("infile.sav") 
array = reader_np.to_structured_array("outfile.dat") 
np.savetxt("outfile2.csv", array, delimiter=",") 
reader_np.close() 

問題は、変換中に名前の属性を失うことです。私はこの問題を解決しようとします。

0

私は、この解決策がPythonの代わりにRを使用していることを知っていますが、実際には単純であり、うまく機能します。

library(foreign) 
write.table(read.spss("inFile.sav"), file="outFile.csv", quote = TRUE, sep = ",") 
関連する問題