python作为脚本性语言,加上它的简便易用性。会经常当作脚本用来处理一下数据和格式。其中处理文件就是频繁用处之一。简单编写几个常用的xls和txt读写函数,以后可以快速复用。

用到xlrd库函数需要预先install

命令:pip install xlrd

直接贴源码:

#! /usr/bin/python
# coding:utf-8
 
import json
import xlrd
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
 
 
class objectfilereadandwrite(object):
 
 @classmethod
 def readxlstodict(cls, xlsfile):
 '''
 读取xls文件生成dict
 '''
 data = xlrd.open_workbook(xlsfile)
 table = data.sheet_by_index(0)
 ret = []
 keys = table.row_values(0)
 for rownum in range(table.nrows):
 onerowvalues = table.row_values(rownum)
 if rownum > 0:
 d = {}
 for colidx, key in enumerate(keys):
  d[key] = onerowvalues[colidx]
 ret.append(d)
 return ret
 
 @classmethod
 def readxlstolist(cls, xlsfile):
 '''
 读取xls文件生成list
 '''
 data = xlrd.open_workbook(xlsfile)
 table = data.sheet_by_index(0)
 ret = []
 for rownum in range(table.nrows):
 onerowvalues = table.row_values(rownum)
 ret.append(onerowvalues)
 return ret
 
 @classmethod
 def readtxt(cls, txtfile, sep):
 '''
 读取txt文件
 '''
 # with + open 可保证with语句执行完毕后同时关闭打开的文件句柄。
 ret = []
 with open(txtfile, "r") as f:
 for line in f.readlines():
 line = line.strip('\n') # 去掉换行符
 listinfo = line.split(sep) # 以 sep 分割成数组
 if listinfo:
  ret.append(listinfo)
 return ret
 
 @classmethod
 def writetojson(cls, jsonfile, ret):
 '''
 写入json文件
 '''
 with open(jsonfile, 'w') as fp:
 json.dump(ret, fp, indent=2, sort_keys=true, encoding="utf-8", ensure_ascii=false)
 
 @classmethod
 def writefromstr(cls, filepath, s):
 '''
 string写入文件
 '''
 with open(filepath, 'w') as fp:
 fp.write(s)
 
 @classmethod
 def writefromlist(cls, filepath, wlist):
 '''
 list写入文件
 '''
 with open(filepath, 'w') as fp:
 fp.writelines(wlist)
 
 
if __name__ == "__main__":
 obj = objectfilereadandwrite()
 # xls
 ret = obj.readxlstodict(xlsfile='xxx.xls')
 obj.writetojson('xxx.json', ret)
 # txt
 ret2 = obj.readtxt(txtfile='result.txt', sep=" ")
 obj.writetojson('result.json', ret2)

因文件中有中文,中间遇到中文乱码问题

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
 
 
# encoding="utf-8", ensure_ascii=false

1、这个是由于unicode编码与ascii编码的不兼容造成的。
2、通常都是ascii,由此python自然调用ascii编码解码程序去处理字符流,当字符流不属于ascii范围内,就会抛出异常(ordinal not in range(128))

百度了下通过 以上方式 解决了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。