python实现修改固定模式的字符串内容操作示例
作者:团长sama 发布时间:2023-05-13 21:44:04
标签:python,字符串
本文实例讲述了python实现修改固定模式的字符串内容操作。分享给大家供大家参考,具体如下:
说明
字符串模式是开头可能有空格,之后可能存在多个小数点,然后后面跟着一个数字,数字可能是小数,数字后可能存在空格。
任务要求删去开头的小数点,如下:
" …78 " 修改为" 78 "
" …7.889 " 修改为" 7.889 "
“.9.8"修改为"9.8”
代码示例
注意这里正则的模式和分组的用法
import os
import re
testStr=r"...7.88 "
pattern=re.compile(r'(?P<lblank> *)(?P<point>\.*)(?P<realcontent>\d+\.?\S*)(?P<rblank> *)')
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<lblank> *)(?P<point>\.*)(?P<realcontent>\d+\.?\S*)(?P<rblank> *)')
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程序设计有所帮助。
来源:https://blog.csdn.net/sinat_24899403/article/details/87371271
0
投稿
猜你喜欢
- python生成随机数都有哪些办法呢使用 random 模块:random模块是python内置的模块,使用方法如random.randin
- 前言python 文件操作、文件读写(write、read、readlines、readline)、文件的相关操作,简单易懂1 文件操作文件
- 您可以使用 ObjectContext 对象提交或放弃一项由 Microsoft Transaction Server (MTS) 管理的事
- HTML5 是近十年来 Web 标准最巨大的飞跃。和以前的版本不同,HTML 5 并非仅仅用来表示 Web 内容,它的使命是将 W
- 本期给大家讲解的函数都不陌生,大家都遇到使用过,但是不要轻易觉得简单去学习,因为往往看似简单的东西,从一个方面深入下收都是一大堆的东西,千万
- 两张表 组织架构表(Organise) 和 工资发放历史记录表 (WagePerMonthHis) 两张表通过 Organise.Item_
- 使用 IE8 时发现其原生的 JSON 解析器存在 Bug,让我们先用 IE8 打开 DEMO 页面体验下。http://lab.grace
- 本文实例讲述了PHP共享内存使用与信号控制。分享给大家供大家参考,具体如下:共享内存共享内存的使用主要是为了能够在同一台机器不同的进程中共享
- 本文详细介绍了array_slice函数的详细用法以及一些常用的array_slice实例程序,分享给大家供大家参考。具体分析如下:arra
- 1、定义路由// 阿里云文件储存Route::group(['prefix'=>'aliyun'],
- 和设计师打过交道的人一定也见到过少数极品,不是扎着小辫子留着小胡子,就是剃了光头抽根烟,通常说起来一套一套的人作品都很一般般,而作品一般般的
- 提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Pyth
- 这篇文章主要是想说,“引用只能指向具体对象而不能指向引用”//创建变量testArray 并引用数组 ["1&
- Set objTextStream=FileSystemObject.CreateTextFile(Filename,[Overwrite]
- 如何让用户也能修改密码? 好了,照下面添加到你要添加的地方去:<%id = Request(&qu
- 一、在工程目录中新建一个excel文件二、使用python脚本程序将目标excel文件中的列头写入,本文省略该部分的code展示,可自行网上
- 本文实例讲述了python中list循环语句用法。分享给大家供大家参考。具体用法分析如下:Python 的强大特性之一就是其对 list 的
- 1.设置小数位数1.1 数据框设置统一小数位数以保留小数点后两位小数为例:import pandas as pdimport numpy a
- 如何结束Python的子线程和子进程结束子线程的方法:这个是搬运其他大神的代码,鄙人也不知道原理,反正拿来主义,暂时没发现什么缺点,先用着再
- Howdy, 大家好,又是我~ 上一次我们简单的谈了一下font set和一些要注意的基本问题。今天我们继续字体这一话题,深入讲讲上次提到