使用python怎么修改固定模式的字符串-创新互联
这篇文章将为大家详细讲解有关使用python怎么修改固定模式的字符串,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
创新互联公司-专业网站定制、快速模板网站建设、高性价比禹州网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式禹州网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖禹州地区。费用合理售后完善,十多年实体公司更值得信赖。代码示例
正则的模式和分组的用法
import os import re 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("result is: {}".format(result))
输出:
<_sre.SRE_Match object; span=(0, 8), match='...7.88 '>
result is: 7.88
拓展
说明
用来处理样本用的。标签是一个txt文件包含了图片的内容,内容的模式是(空格*)+(.*)+(小数或者整数)+(空格凑齐位数)。
脚本实现功能是:将第二部分里面的小数点去除(用正则分组去),修正原本的标签文件,并将标签两边占位用的空格去掉,形成新的标签,将新标签文件和对应的图片移动到以标签长度命名的文件夹中。由于文件量有40w+,使用多进程处理。
拓展代码
import os import re from multiprocessing import Pool import shutil def getAllFilePath(pathFolder,filter=[".jpg",".txt"]): #遍历文件夹下所有图片 allCropPicPathList=[] allTXTPathList=[] #maindir是当前搜索的目录 subdir是当前目录下的文件夹名 file是目录下文件名 for maindir,subdir,file_name_list in os.walk(pathFolder): for filename in file_name_list: apath=os.path.join(maindir,filename) ext=os.path.splitext(apath)[1]#返回扩展名 if ext==filter[0] and ('_crop' in filename): allCropPicPathList.append(apath) elif ext==filter[1] and ('_crop' in filename): allTXTPathList.append(apath) return list(zip(allCropPicPathList,allTXTPathList)) #分析样本 对模式错误(即删去在开头空格和数字之间的.)的进行修正 def checkTxtContent(txtcontent,txtPath): pattern=re.compile(r'(?P*)(?P \.*)(?P \d+\.?\S*)(?P *)') finalStr=pattern.search(txtcontent) if len(finalStr.group("point"))!=0: resultStr=finalStr.group("lblank")+finalStr.group("realcontent")+finalStr.group("rblank") with open(txtPath,'w') as fw: fw.write(resultStr) with open(r'E:\Numberdata\wrong.txt','a') as fw: fw.write(txtPath+"\n") print(txtPath,"is wrong!") return resultStr else: return txtcontent #移动图片到对应长度的文件夹 标签label进行修改 def dealSampleList(samplePathList,saveBaseDir): for samplePath in samplePathList: txtPath=samplePath[1] picPath=samplePath[0] newtxtStr="" with open(txtPath,'r') as fr: txtStr=fr.readline() newtxtStr=checkTxtContent(txtStr,txtPath) newtxtStr=newtxtStr.strip() # 创建对应的文件夹 saveDir=os.path.join(saveBaseDir,str(len(newtxtStr))) if not os.path.exists(saveDir): os.mkdir(saveDir) newTxtName=os.path.basename(txtPath) newPicName=os.path.basename(picPath) with open(os.path.join(saveDir,newTxtName),'w') as fw: fw.write(newtxtStr) shutil.move(picPath,os.path.join(saveDir,newPicName)) # print(newPicName,'is done!') 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)) for i in range(n_process+1)] sublists=[allFilePath[indices[i]:indices[i+1]] for i in range(n_process)] #生成进程池 p=Pool(n_process) for i in sublists: print("sublist len is {}".format(len(i))) p.apply_async(dealSampleList, args=(i,r'E:\Numberdata\data')) p.close() p.join() print("All done!")
关于使用python怎么修改固定模式的字符串就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享名称:使用python怎么修改固定模式的字符串-创新互联
文章出自:http://scgulin.cn/article/psihc.html