因为数据处理系统只能识别sav文件,需要把excel数据文件转换sav文件。(我的问题已经解决了)
起初,我在网上搜索了很多关于如何处理的信息sav阅读数据文件的内容python中的savReaderWriter估计模块包很久没有更新了,python3.7用pip安装时会报错(之后我也没有解决这个报错);还有就是报错;pyreadstat包,感觉不太懂。
当时我一心想着杠正面,想直接把它拿走excel文件转为sav文件,思路没有打开。然后我又摸索了一遍sav我认为我基本上理解文件的文件格式sav文件的特点是模仿其格式并自行编写sav文件行不。sav既能用notepad打开,又可以被打开excel打开,文件格式和内容不会变形。我就试着把excel读出并使用中文数据open('*.Sav','w')创建sav文件,再把excel数据写入中sav文件。在这个过程中,我模仿自己的想法sav文件格式,,再合并excel中间的行为是字符串。最后生成的sav系统可以识别文件。
现在整个处理过程相当简单,只是思维问题。
最后,我们来谈谈我们在处理过程中遇到的一个小问题:Windows下面的换行是‘’\r\n',如果写入文件时,代码写入的是'\n该系统将自动将其转换为\r\n这些都是系统默认的,写作sav最好不要单独指定文件。linux下行换行就是\n'。
from openpyxl import load_workbook excel_name = 'test.xlsx' sav_name = 'result.Sav' wb = load_workbook(excel_name) ws = wb.active with open(sav_name,'w',encoding='GBK') as f: i=1 while i<=ws.max_row: j = 1 one_line = [] while j<ws.max_column: cell_value = ws.cell(i,j).value if not cell_value: cell_value='' #关键步骤,在去除的每个单元格值后面添加一个'table制表符,模拟.sav文件结构。 one_line.append(str(cell_value) '\t') j =1 cell_value = ws.cell(i,j).value if not cell_value: cell_value = '' one_line.append(str(cell_value)) if i != ws.max_row: one_line.append('\n') new_line = ''.join(one_line) f.write(new_line) i =1 wb.close()