写 SPSS文件系统
写入 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