python实现简单文件读写函数
python作为脚本性语言,加上它的简便易用性。会经常当作脚本用来处理一下数据和格式。其中处理文件就是频繁用处之一。简单编写几个常用的xls和txt读写函数,以后可以快速复用。
用到xlrd库函数需要预先install
命令:pipinstallxlrd
直接贴源码:
#!/usr/bin/python #coding:utf-8 importjson importxlrd importsys reload(sys) sys.setdefaultencoding('utf-8') classObjectFileReadAndWrite(object): @classmethod defreadXlsToDict(cls,xlsFile): ''' 读取xls文件生成dict ''' data=xlrd.open_workbook(xlsFile) table=data.sheet_by_index(0) ret=[] keys=table.row_values(0) forrowNuminrange(table.nrows): oneRowValues=table.row_values(rowNum) ifrowNum>0: d={} forcolIdx,keyinenumerate(keys): d[key]=oneRowValues[colIdx] ret.append(d) returnret @classmethod defreadXlsToList(cls,xlsFile): ''' 读取xls文件生成list ''' data=xlrd.open_workbook(xlsFile) table=data.sheet_by_index(0) ret=[] forrowNuminrange(table.nrows): oneRowValues=table.row_values(rowNum) ret.append(oneRowValues) returnret @classmethod defreadTxt(cls,txtFile,sep): ''' 读取txt文件 ''' #with+open可保证with语句执行完毕后同时关闭打开的文件句柄。 ret=[] withopen(txtFile,"r")asf: forlineinf.readlines(): line=line.strip('\n')#去掉换行符 listInfo=line.split(sep)#以sep分割成数组 iflistInfo: ret.append(listInfo) returnret @classmethod defwriteToJson(cls,jsonFile,ret): ''' 写入json文件 ''' withopen(jsonFile,'w')asfp: json.dump(ret,fp,indent=2,sort_keys=True,encoding="utf-8",ensure_ascii=False) @classmethod defwriteFromStr(cls,filePath,s): ''' string写入文件 ''' withopen(filePath,'w')asfp: fp.write(s) @classmethod defwriteFromList(cls,filePath,wList): ''' list写入文件 ''' withopen(filePath,'w')asfp: 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)
因文件中有中文,中间遇到中文乱码问题
importsys reload(sys) sys.setdefaultencoding('utf-8') #encoding="utf-8",ensure_ascii=False
1、这个是由于Unicode编码与ASCII编码的不兼容造成的。
2、通常都是ascii,由此Python自然调用ascii编码解码程序去处理字符流,当字符流不属于ascii范围内,就会抛出异常(ordinalnotinrange(128))
百度了下通过以上方式解决了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。