寫入 SPSS 系統文件(.sav
、.zsav
)
以下為相關的 SPSS 命令(以大寫形式 CAPS 呈現)
savFileName : str
SPSS 數據文件的文件名
以 .sav
結尾的文件使用舊版壓縮方案壓縮。
以 _uncompressed.sav
結尾的文件不壓縮,這在需要用更快的 savReaderWriter.SavReaderNp
類讀取文件時非常有用
以 .zsav
結尾的文件使用 ZLIB(ZSAV)壓縮方案(需要 v21 及以上版本的 SPSS I/O 文件支持)
varNames : list
變量名的字符串列表,按其在 SPSS 數據文件中應顯示的順序排列
list of of strings of the variable names in the order in which they should appear in the spss data file
varTypes : dict
變量類型字典 {varName: varType}
varType == 0 → 數值型
varType > 0 → 該長度(以字節為單位)的字符型
valueLabels : dict, 可選
值標簽字典 {varName: {value: label}}
對應 SPSS 中的 VALUE LABELS 命令
varLabels : dict, 可選
變量標簽字典 {varName: varLabel}
對應 SPSS 中的 VARIABLE LABELS 命令
ioUtf8 : bool, int, 可選
指示與 I/O 模塊通信的文本模式
涉及 SPSS 中的 unicode 模式(SET UNICODE=ON)和代碼頁模式(SET UNICODE=OFF)
代碼頁模式:ioUtf8=CODEPAGE_MODE、ioUtf8=0 或 ioUtf8=False,使用當前 ioLocale 設置確定讀寫數據的編碼
標準 unicode 模式:ioUtf8=UNICODE_UMODE、ioUtf8=1 或 ioUtf8=True,使用 Unicode 編碼(UTF-8)讀寫數據,返回 unicode 字符串
字節 unicode 模式:ioUtf8=UNICODE_BMODE 或 ioUtf8=2,類似標準 unicode 模式,但返回 byte 字符串。
注意:
以 Unicode 編碼保存的數據文件無法被 16 版之前的 IBM SPSS Statistics 讀取
Unicode 模式自 IBM SPSS Statistics 21 版起成為默認模式
unicode 模式下打開代碼頁編碼的 SPSS 數據文件,或在代碼頁模式下以 Unicode 格式保存數據文件時,定義的字符串寬度會自動三倍化
mode : str, 可選
指示打開 savFileName 的模式:
wb → 寫入
ab → 追加
cp → 復制:使用 refSavFileName 作為參考文件初始化表頭(對應 SPSS 中的 APPLY DICTIONARY 命令)
注意:
默認是 wb,即寫入
formats : dict, 可選
格式字典 {varName: printFmt}
對應 SPSS 中的 FORMATS 命令
missingValues : dict, 可選
缺失值字典 {varName: {missing value spec}},對應 SPSS 中的 MISSING VALUES 命令
measureLevels : dict, 可選
測量級別字典 {varName: }
對應 SPSS 中的 VARIABLE LEVEL 命令
有效級別:“unknown”、“nominal”(名義)、“ordinal”(有序)、“scale”(刻度)、“ratio”(比率)、“flag”(標記)、“typeless”(無類型)
注意:
若使用 measureLevels,則必須同時設置 columnWidths 和 alignments
附錄中有介紹 nominal
columnWidths : dict, 可選
列顯示寬度字典 {varName: }
對應 SPSS 中的 VARIABLE WIDTH 命令
默認值:None → 字符串變量≥10,數值變量自動調整
alignments : dict, 可選
變量對齊方式字典 {varName: <left/center/right>}
對應 SPSS 中的 VARIABLE ALIGNMENT 命令(默認值:None → 左對齊)
varSets : dict, 可選
集合字典 {setName: list_of_valid_varNames}
對應 SPSS 中的 SETSMR 命令
varRoles : dict, 可選
變量角色字典 {varName: varRole}
varRole 可取值:‘both’(兩者)、‘frequency’(頻率)、‘input’(輸入)、‘none’(無)、‘partition’(分區)、‘record ID’(記錄 ID)、‘split’(拆分)、‘target’(目標)
對應 SPSS 中的 VARIABLE ROLE 命令
varAttributes : dict, 可選
變量屬性字典 {varName: {attribName: attribValue}}
對應 SPSS 中的 VARIABLE ATTRIBUTES 命令
fileAttributes : dict, 可選
文件屬性字典 {attribName: attribValue}
對應 SPSS 中的 FILE ATTRIBUTES 命令
fileLabel : dict, 可選
文件標簽字符串,若未指定,默認值為 “文件由用戶 在 創建”
對應 SPSS 中的 FILE LABEL 命令
multRespDefs : dict, 可選
多重響應集定義(二分組或類別組)字典 {setName: }
在 SPSS 語法中,setName 以美元符號為前綴(如 $someSet)
對應 SPSS 中的 MRSETS 命令
caseWeightVar : str, 可選
設置為個案權重的有效變量名(對應 SPSS 中的 WEIGHT BY 命令)
overwrite : bool, 可選
指示是否覆蓋已存在的 SPSS 文件。
ioLocale : bool, 可選
指示 I/O 模塊的區域設置,對應 SPSS 中的 SET LOCALE 命令
默認值:None,等同于 locale.setlocale(locale.LC_CTYPE)
refSavFileName : str, 可選
用于初始化表頭(即 SPSS 數據字典)的參考文件,包含變量標簽、值標簽、缺失值等定義。
僅在 mode=cp 時有效
示例一
import savReaderWriter as srwrecords = [['Test1', 1, 1], ['Test2', 2, 1]]
varNames = ['var1', 'v2', 'v3']
varTypes = {'var1': 5, 'v2': 0, 'v3': 0}
savFileName = 'someFile.sav'
with srw.SavWriter(savFileName, varNames, varTypes, ioUtf8=True) as writer:for record in records:writer.writerow(record)
示例二
# -*- coding: utf-8 -*-import savReaderWriter as srwrecords = [['中國', 1, 1], ['世界', 2, 1]]
varNames = ['第一列', '第二列', 'v3']
varTypes = {'第一列': 5, '第二列': 0, 'v3': 0}
savFileName = 'someFile.sav'
print(str(type(varNames[0])), varNames[0])
with srw.SavWriter(savFileName, varNames, varTypes, ioUtf8=True) as writer:for record in records:
項目用法
# -*- coding: utf-8 -*-import savReaderWriter as srwvarNames = [ "V_1", "V_2", "V_3", "V_4", "V_5", "V_6", "V_7", "V_8", "V_9", "V_10", "V_11", "V_12", "V_13", "Q_1", "Q_2", "Q_3", "Q_3_blank", "Q_4_1", "Q_4_2", "Q_4_3", "Q_4_3_blank", "Q_5", "Q_5_blank", "Q_6", "V_14", "V_15", "V_16", "V_17", "V_18" ]
varTypes = {"V_2":1024,"Q_1":1024,"Q_6":1024,"V_10":1024,"Q_3_blank":1024,"V_11":1024,"V_13":1024,"Q_5_blank":1024,"V_14":1024,"V_3":1024,"V_7":1024,"Q_4_3_blank":1024,"V_6":1024,"V_8":1024,"Q_4_3":0,"V_16":1024,"V_18":1024,"Q_4_1":0,"Q_4_2":0,"Q_5":0,"V_17":1024,"V_5":1024,"V_12":1024,"Q_2":1024,"Q_3":0,"V_15":1024,"V_1":1024,"V_4":1024,"V_9":1024}
savFileName = "someFile.sav"
records = [["1","71754401533","211","2025-06-10 02:06:41","57.80","中國,安徽,合肥","wj.demo.com","Windows","\"2054401533591\"","\"2154401533591\"","cn","0","strategy_A","煗荶尥嫄蛛","https://data.demo.net/ouf-SoaYmr58gYP8RdAqo3E2mC.png",2,"-","0","0","1","閭璄巿嬦恅馮肇緁獫淇","1","-","鄇卩痾蝻爣傶鮩膳頎庻存搾鐛泗芪铔帄蛣俒炯軸賃潀壖晦踵嫝慈覞胄礖鮭鏇忥唹貰厖","-","liuhua","liuhua@demo.com","服務端","{\"key2\":\"demo2\",\"key1\":\"demo1\"}"],["2","71754400942","271","2025-06-10 01:56:45","97.45","中國,海南,海口","wj.demo.com","Solaris","\"2054400942130\"","\"2154400942130\"","cn","0","strategy_B","妽鈘抌鬙皤梟伾","https://data.demo.net/ouf-g2GYAK6XJStHxUErsoK9gE.png",3,"監","1","1","0","-","1","-","賜燗錆喬梼嘴埪衂羌蕌姝抇毅瀝堗謫孀諓焩驋悾岄腎頜珶団磛鉡縫鹖襵覺渞鈠剴媲捹褎閱茾胩帷譼義顢惕楛孯","-","zhaohua","zhaohua@demo.com","服務端","{\"key1\":\"demo1\",\"key2\":\"demo2\"}"]]
varLabels = {"Q_3_blank":"3.不計分單選_選項填空","V_1":"序號","V_2":"response_id","V_4":"提交時間","V_7":"渠道來源","Q_2":"2.不計分上傳","V_18":"額外投放信息","Q_3":"3.不計分單選","Q_4_1":"4.不計分多選_選項1","Q_4_2":"4.不計分多選_選項2","V_15":"username","Q_5":"5.不計分下拉","Q_6":"6.不計分長文本","V_14":"回收渠道(custom)","V_16":"email","Q_4_3":"4.不計分多選_其他","Q_4_3_blank":"4.不計分多選_其他_選項填空","Q_1":"1.不計分填空","V_5":"分數","V_12":"無效答卷","V_6":"地區","V_8":"操作系統","Q_5_blank":"5.不計分下拉_選項填空","V_3":"作答時間","V_10":"device_id","V_17":"department","V_9":"user_id","V_11":"作答語言","V_13":"命中質量管理策略"}
valueLabels = {"Q_3":{3:"其他",-3:"未作答",1:"選項1",2:"選項2"}}
with srw.SavWriter(savFileName, varNames, varTypes, varLabels=varLabels, valueLabels=valueLabels, ioUtf8=True) as writer:for record in records:writer.writerow(record)
附錄
nominal
在統計、數據科學及 SPSS 等場景中最常見的中文翻譯是:名義
它通常用于描述數據的測量級別(measurement level),指 “名義型數據” 或 “分類數據”
數據僅用于區分不同類別,類別之間無順序或大小關系,例如:性別(男 / 女)、職業類型、顏色分類等都屬于名義型數據。
vim看二進制格式
看格式::%!xxd
看格式反轉::%!xxd -r
看隱藏字符:set list