python实现修改固定模式的字符串内容操作示例
本文实例讲述了python实现修改固定模式的字符串内容操作。分享给大家供大家参考,具体如下:
说明
字符串模式是开头可能有空格,之后可能存在多个小数点,然后后面跟着一个数字,数字可能是小数,数字后可能存在空格。
任务要求删去开头的小数点,如下:
"…78"修改为"78"
"…7.889"修改为"7.889"
“.9.8"修改为"9.8”
代码示例
注意这里正则的模式和分组的用法
importos importre testStr=r"...7.88" pattern=re.compile(r'(?P*)(?P \.*)(?P \d+\.?\S*)(?P *)') finalStr=pattern.search(testStr) print(finalStr) result=finalStr.group("lblank")+finalStr.group("realcontent")+finalStr.group("rblank") print("resultis:{}".format(result))
输出:
<_sre.SRE_Matchobject;span=(0,8),match='...7.88'>
resultis:7.88
拓展
说明
用来处理样本用的。标签是一个txt文件包含了图片的内容,内容的模式是(空格*)+(.*)+(小数或者整数)+(空格凑齐位数)。
脚本实现功能是:将第二部分里面的小数点去除(用正则分组去),修正原本的标签文件,并将标签两边占位用的空格去掉,形成新的标签,将新标签文件和对应的图片移动到以标签长度命名的文件夹中。由于文件量有40w+,使用多进程处理。
拓展代码
importos importre frommultiprocessingimportPool importshutil defgetAllFilePath(pathFolder,filter=[".jpg",".txt"]): #遍历文件夹下所有图片 allCropPicPathList=[] allTXTPathList=[] #maindir是当前搜索的目录subdir是当前目录下的文件夹名file是目录下文件名 formaindir,subdir,file_name_listinos.walk(pathFolder): forfilenameinfile_name_list: apath=os.path.join(maindir,filename) ext=os.path.splitext(apath)[1]#返回扩展名 ifext==filter[0]and('_crop'infilename): allCropPicPathList.append(apath) elifext==filter[1]and('_crop'infilename): allTXTPathList.append(apath) returnlist(zip(allCropPicPathList,allTXTPathList)) #分析样本对模式错误(即删去在开头空格和数字之间的.)的进行修正 defcheckTxtContent(txtcontent,txtPath): pattern=re.compile(r'(?P*)(?P \.*)(?P \d+\.?\S*)(?P *)') finalStr=pattern.search(txtcontent) iflen(finalStr.group("point"))!=0: resultStr=finalStr.group("lblank")+finalStr.group("realcontent")+finalStr.group("rblank") withopen(txtPath,'w')asfw: fw.write(resultStr) withopen(r'E:\Numberdata\wrong.txt','a')asfw: fw.write(txtPath+"\n") print(txtPath,"iswrong!") returnresultStr else: returntxtcontent #移动图片到对应长度的文件夹标签label进行修改 defdealSampleList(samplePathList,saveBaseDir): forsamplePathinsamplePathList: txtPath=samplePath[1] picPath=samplePath[0] newtxtStr="" withopen(txtPath,'r')asfr: txtStr=fr.readline() newtxtStr=checkTxtContent(txtStr,txtPath) newtxtStr=newtxtStr.strip() #创建对应的文件夹 saveDir=os.path.join(saveBaseDir,str(len(newtxtStr))) ifnotos.path.exists(saveDir): os.mkdir(saveDir) newTxtName=os.path.basename(txtPath) newPicName=os.path.basename(picPath) withopen(os.path.join(saveDir,newTxtName),'w')asfw: fw.write(newtxtStr) shutil.move(picPath,os.path.join(saveDir,newPicName)) #print(newPicName,'isdone!') if__name__=='__main__': allFilePath=getAllFilePath(r'E:\Numberdata\4') #dealSampleList(allFilePath,r'E:\Numberdata\data') n_total=len(allFilePath) n_process=4#8线程 #每段子列表长度 length=float(n_total)/float(n_process) indices=[int(round(i*length))foriinrange(n_process+1)] sublists=[allFilePath[indices[i]:indices[i+1]]foriinrange(n_process)] #生成进程池 p=Pool(n_process) foriinsublists: print("sublistlenis{}".format(len(i))) p.apply_async(dealSampleList,args=(i,r'E:\Numberdata\data')) p.close() p.join() print("Alldone!")
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python字符串操作技巧汇总》、《Python数据结构与算法教程》、《Python列表(list)操作技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。