python实现修改固定模式的字符串内容操作示例


Posted in Python onDecember 30, 2019

本文实例讲述了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程序设计有所帮助。

Python 相关文章推荐
Python urlopen 使用小示例
Sep 06 Python
python常见排序算法基础教程
Apr 13 Python
Python编程实战之Oracle数据库操作示例
Jun 21 Python
Python常用模块之requests模块用法分析
May 15 Python
Django框架 querySet功能解析
Sep 04 Python
Python检查图片是否损坏及图片类型是否正确过程详解
Sep 30 Python
树莓派极简安装OpenCv的方法步骤
Oct 10 Python
Python调用.NET库的方法步骤
Dec 27 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
Python实现一个优先级队列的方法
Jul 31 Python
Django DRF APIView源码运行流程详解
Aug 17 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 Python
python基于celery实现异步任务周期任务定时任务
Dec 30 #Python
Django框架之中间件MiddleWare的实现
Dec 30 #Python
Django 路由层URLconf的实现
Dec 30 #Python
python解析多层json操作示例
Dec 30 #Python
pytorch 求网络模型参数实例
Dec 30 #Python
利用python3 的pygame模块实现塔防游戏
Dec 30 #Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 #Python
You might like
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
CI框架中zip类应用示例
2014/06/17 PHP
php猜单词游戏
2015/09/29 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
JavaScript实现删除电脑的关机键
2016/07/26 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
2017/10/23 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
javascript Object与Function使用
2010/01/11 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
Vue中nprogress页面加载进度条的方法实现
2020/11/13 Javascript
Python日志模块logging简介
2015/04/13 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
Python Pandas 箱线图的实现
2019/07/23 Python
python中for in的用法详解
2020/04/17 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
python 模拟登录B站的示例代码
2020/12/15 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
基本款天堂:Everlane
2017/05/13 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
介绍一下XMLHttpRequest对象
2012/02/12 面试题
小学生学习感言
2014/03/10 职场文书
美化环境标语
2014/06/20 职场文书
党支部培养考察意见
2015/06/02 职场文书
环保证明
2015/06/23 职场文书
2015年成本会计工作总结
2015/10/14 职场文书