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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。