作用:

由于python可以辅助数据分析和数据挖掘,读取文件, 而savReaderWriter模块就是为此而设计。

官网 :http://pythonhosted.org/savReaderWriter/

读取文件

with savReaderWriter.SavReader(filepath, ioUtf8=True) as read:#如果不用ioutf8, 汉字十六进制\被转义,更麻烦

for i in read:

print i

返回值:

# getsavfileinfo infomation :

# (self.numVars, self.nCases, self.varNames, self.varTypes,self.formats, self.varLabels, self.valueLabels)

读取文件头

with savReaderWriter.SavReader(filepath, ioUtf8=True) asread:

ret=read.getSavFileInfo()

#return(self.numVars, self.nCases, self.varNames, self.varTypes,

# self.formats, self.varLabels, self.valueLabels)

#returnread.formats, read.varNames, read.varLabels, read.valueLabelsreturn ret[4], ret[2], ret[5], ret[6]

生成spss实例 ==注意valueLabels的值的key要是浮点型的

importdatetime

savFileName= '/opt/someFile.sav'varNames= [u'ID', u'StartTime', u'EndTime', u'VerNo', u'Q1', u'Q2', u'Q4']

varTypes= {u'Q1': 0, u'Q2': 400, u'Q4': 400, u'StartTime': 0, u'VerNo': 0, u'EndTime': 0, u'ID': 20}

varLabels= {u'Q1': u'\u5546\u8d85\u914d\u9001\u6536\u8d39\u6807\u51c6\u6b63\u786e\u7684\u662f', u'Q2': u'\u5546\u8d85\u4e0a\u7ebf\u6807\u51c6', u'Q4': u'\u672c\u6b21\u57f9\u8bad\u6536\u83b7\u548c\u610f\u89c1', u'StartTime': u'\u5f00\u59cb\u65f6\u95f4', u'VerNo': u'\u7248\u672c', u'EndTime': u'\u7ed3\u675f\u65f6\u95f4', u'ID': u'\u7528\u6237'}

valueLabels= {'Q1': {1.0: u'\u4e13\u9001\u6536\u8d39', 2.0: u'\u5feb\u9001\u6536\u8d39'}, u'Q2': {}, u'Q4': {}, 'StartTime': {}, 'VerNo': {}, 'EndTime': {}, 'ID': {}}

formats= {u'Q1': u'F5.0', u'VerNo': u'F5.0', u'EndTime': 'DATETIME40', u'StartTime': 'DATETIME40'}

data= [[u'lKWmel1491380676', 13710788676.0, 13710788696.0, 1L, 1, u'\u725b\u820c', u'\u6e56\u516c\u56ed\u80e1\u5a77']]#时间模块这样是错误的data = [[u'lKWmel1491380676', datetime.datetime(2016, 9, 21, 13, 42, 8), datetime.datetime(2016, 9, 21, 13, 42, 8), 1L, 1, u'\u725b\u820c', u'\u6e56\u516c\u56ed\u80e1\u5a77']]#

#with SavWriter(savFileName, varNames, varTypes, varLabels=varLabels, columnWidths={}, ioUtf8=True) as writer:#writer.writerows(data)

with SavWriter(savFileName=savFileName, varNames=varNames, varTypes=varTypes,

varLabels=varLabels, valueLabels=valueLabels, ioUtf8=True, formats=formats,

columnWidths={}) as writer:

writer.writerows(data)

错误总结:

1.

针对时间的更改

spss有自己的时间戳,为浮点型,与python的浮点型不一样,有差距,特别要注意

2.

读取文件时候,对文件里面时间改变成字符串类型

with savReaderWriter.SavReader(filepath, ioUtf8=True) as read:#如果不用ioutf8, 汉字十六进制\被转义,更麻烦

my_time =my_datetime()for i inread:for j inrange(len(valuetypes)):#数据库不认unicode所以要转换下

#将varchar进行json存如数据库

if valuetypes[j] == "DATETIME":

# 注意区别 ,这个是python2.7使用的,因为python2.7取出来就是字符串,看看是不是unicode,如果是转一下就ok了

# become_time = my_time.become_str(i[j])

# i[j] = become_time

#而这句呢,是3.5的区别,因为取出来是spss的时间戳类型,与python不同,需要转, 具体了解去看源码

i[j]= read.spss2strDate(i[j], '%Y-%m-%d %H:%M:%S', None)

3.

写入的时候对时间的处理

savFileName = '/opt/someFile.sav'with SavWriter(savFileName=savFileName, varNames=varNames, varTypes=varTypes,

formats=formats, varLabels=varLabels, valueLabels=valueLabels,

ioUtf8=True, columnWidths={}) as writer:for row_data inquery_data:

sub_li=[]for i inrange(len(my_columns_types)):

sub_data=row_data[varNames[i]]if my_columns_types[i] == "VARCHAR":

sub_li.append(json.loads(sub_data))elif my_columns_types[i] == "DATETIME":

sub_li.append(writer.spssDateTime(b'%s' % sub_data, '%Y-%m-%d %H:%M:%S')) # 这句这句,在源码里面

# 注意: python3的区别:aaa为字符串

#sub_li.append(writer.spssDateTime(bytes(aaa, 'utf-8'), '%Y-%m-%d %H:%M:%S'))elif my_columns_types[i] == "DATE":

sub_li.append(writer.spssDateTime(b'%s' % sub_data, '%Y-%m-%d'))else:

sub_li.append(sub_data)

data.append(sub_li)

writer.writerows(data)

4.

json对字典的处理,2.7与3.5不用,如果存入数据库的话,2.7需要pickle, 而3.5需要json

5

错误总结

通常一下错误的原因是因为头部数据信息和data数据不对称,数据列不对等造成的, 比如可能varname有10列,而数据只有5列, comlns

Traceback (most recent call last):

File"/opt/code/test_code/SpssMysql_and_SyntheticSpss/controllers/download_handler.py", line 92, in varLabels=varLabels, ioUtf8=True) as writer:

File"/usr/local/lib/python2.7/dist-packages/savReaderWriter/savWriter.py", line 220, in __init__self.varNamesTypes=self.varNames, self.varTypes

File"/usr/local/lib/python2.7/dist-packages/savReaderWriter/header.py", line 200, invarNamesTypes

checkErrsWarns(msg, retcode)

File"/usr/local/lib/python2.7/dist-packages/savReaderWriter/error.py", line 120, incheckErrsWarnsraiseSPSSIOError(msg, retcode)

savReaderWriter.error.SPSSIOError: Problem setting variable name'ID' [SPSS_DUP_VAR]

6.

原因是列的名称不符合标准,字母数字下划线才ok

7. 'utf-8' codec can't decode bytes in position 48-49: unexpected end of data

意思是不能解码字节位置48-49:意料之外的数据

为什么, 因为spss数据出现了乱码, 在某一列,例如: spss进行了截取,这个时候就会出现乱码情况

with savReaderWriter.SavReader(filepath) asread:

# 这里的IOutf8 就不能等于True了, 只能用字节的形式, 然后下面针对字符进行处理, 去掉后两位

# 如果不用ioutf8, 汉字十六进制\被转义,更麻烦

dataList=[]

#  多条插入数据方式for i inread:for j inrange(len(valuetypes)):

# 数据库不认unicode所以要转换下

# 将varchar进行json存如数据库if valuetypes[j] == "DATETIME":ifi[j]:

i[j]= read.spss2strDate(i[j], '%Y-%m-%d %H:%M:%S', None)

# i[j]= read.spss2strDate(str(i[j], encoding='utf-8'), '%Y-%m-%d %H:%M:%S', None)

elif valuetypes[j]== "DATE":ifi[j]:

i[j]= read.spss2strDate(i[j], '%Y-%m-%d', None)

# i[j]= read.spss2strDate(str(i[j], encoding='utf-8'), '%Y-%m-%d', None)

elif valuetypes[j]== "VARCHAR" or valuetypes[j] == "TEXT":try:

i[j]= i[j].decode("utf-8")

except:

i[j]= i[j][:-2].decode('utf-8')

python读取sav文件_savReaderWriter 模块的使用相关推荐

  1. python读取sav文件_在Python中读取SPSS(.sav)文件时,获取“title already used as a name or title”错误...

    我正在读一个SPSS文件(.sav).我下面的代码可以读取.sav文件.但是,我遇到了一个非常奇怪的错误.当我试图读取另一个.sav文件时,它会给出以下错误Traceback (most recent ...

  2. python读取sav文件_Python如何导入Spss的sav类型的数据

    因工作需要此前接触了大量sav格式数据,现转用python,想使用以前的数据进行测试, 直接用python读入sav文件,作者尝试了很多方法,均不理想. 目前能找到的最好的方法是: 先使用Spss将s ...

  3. python读取sav文件_SPSS Modeler下sav格式转成csv格式

    在使用SPSS Modeler进行数据分析和数据挖掘时,官方Demos中自带数据的格式为sav格式,我们只能通过该软件进行数据的读取,如果想在其他途径如MySQL中导入该数据,那是不行的. 如果我们在 ...

  4. python读取sav文件_Numpy中数据的常用的保存与读取方法

    小书匠 深度学习 文章目录: 在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到 ...

  5. python读文件代码-简单了解Python读取大文件代码实例

    这篇文章主要介绍了简单了解Python读取大文件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通常对于大文件读取及处理,不可能直接加载到内 ...

  6. python打开excel的函数-Python读取excel文件中带公式的值的实现

    在进行excel文件读取的时候,我自己设置了部分直接从公式获取单元格的值 但是用之前的读取方法进行读取的时候,返回值为空 import os import xlrd from xlutils.copy ...

  7. 用python处理excel的基本语法_《使用python3读取处理excel表的数据内容如何对内容求平均值》 用python读取excel文件...

    使用python3读取处理excel表的数据内容如何对内容求平均值 先说下概述: 平就合平均数的值. (a1 a2 --an)/na1,a2,--,an的平均值. 简单算均数.么一组数字10.20.3 ...

  8. python读取文件_一日一技:使用Python读取Excel文件

    安装xlrd模块: pip install xlrd 使用xlrd模块,可以从电子表格中检索信息. 例如,可以在Python中完成读取,写入或修改数据的操作. 另外,用户可能必须浏览各种工作表并根据某 ...

  9. python可以读取excel文档吗_python打开excel文件【python读取excel文件如何进行】

    Python语言打开Excel文件? 一.安装xlrd模 到python官网下http://pypi.python.org/pypi/xlrd模块安装,前已经安装python 环境. 二.使用介 1. ...

最新文章

  1. WCF步步为营(五):数据契约
  2. CCNA笔记-交换机安全
  3. 在Project 2010中添加自定义任务窗格
  4. 系统镜像_如何通过云服务器创建Windows系统镜像
  5. VS2013出现“无法找到“xxx.exe”的调试信息,或者调试信息不匹配”错误解决方案
  6. 【渝粤题库】国家开放大学2021春2402外国文学题目
  7. 如何使用设计模式来构造系统--(7)
  8. 启动mq命令 linux,RocketMQ:Linux下启动server和broker的命令
  9. vue实现一个带搜索功能的列表_(Vue起步)2.模板指令:v-for / v-on / v-model
  10. 【2016年第1期】农业大数据资产管理面临的挑战与思考
  11. 配置openldap_openldap环境搭建+集成JIRA服务
  12. vue 源码学习(一) 目录结构和构建过程简介 1
  13. 【kibana】状态异常 Status: Red Status changed from red to yellow - No existing Kibana index found
  14. JAVA基础知识之Collections工具类
  15. C++ 前置操作符与后置操作符
  16. dmx512如何帧同步_stm32实现DMX512协议发送与接收(非标)
  17. 【Linux】解决shell脚本中syntax error:unexpected end of file问题
  18. 怎么在计算机网络上添加文件,教你win7如何设置网络共享文件夹
  19. halcon 20.11.02 深度学习语义分割例程报错
  20. C4996 scanf:This function or variable may be unsafe. / C6031 返回值被忽略.

热门文章

  1. Docker快速入门总结
  2. Boxcryptor免费加密你的云盘网盘V2021云储存文件加密工具,支持坚果云/Dropbox等
  3. Dart语法篇之基础语法(一)
  4. 红尘零落,勿忘心安!
  5. springboot多模块打包报错,找不到xxx包,找不到xxx类
  6. HEIC文件怎么转化成jpg
  7. 一篇超详细的系统异常处理指南?
  8. Linux 如何从命令行执行程序
  9. 无忧无虑的生活,只存在于梦想里吗?
  10. 耳机主动降噪测试(ANC)-耳机被动降噪测试(PNC),蓝牙耳机测试-