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中type的构造函数参数含义说明
Jun 21 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
Jun 27 Python
Python+matplotlib实现填充螺旋实例
Jan 15 Python
使用Python实现跳帧截取视频帧
May 31 Python
django foreignkey(外键)的实现
Jul 29 Python
python 使用shutil复制图片的例子
Dec 13 Python
python实现梯度下降和逻辑回归
Mar 24 Python
Python中有几个关键字
Jun 04 Python
Python docutils文档编译过程方法解析
Jun 23 Python
keras的ImageDataGenerator和flow()的用法说明
Jul 03 Python
python 贪心算法的实现
Sep 18 Python
opencv深入浅出了解机器学习和深度学习
Mar 17 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 之入门篇
2006/12/04 PHP
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
多种JQuery循环滚动文字图片效果代码
2020/06/23 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
JS实现的随机排序功能算法示例
2017/06/09 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python语言实现机器学习的K-近邻算法
2015/06/11 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
详解python之简单主机批量管理工具
2017/01/27 Python
Python构建网页爬虫原理分析
2017/12/19 Python
Python zip()函数用法实例分析
2018/03/17 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
python实现canny边缘检测
2020/09/14 Python
Python下载的11种姿势(小结)
2020/11/18 Python
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
超市促销实习自我鉴定
2013/09/23 职场文书
创业计划书撰写原则
2014/01/25 职场文书
走进敬老院活动总结
2014/07/10 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
党员思想汇报材料
2014/12/19 职场文书
社区敬老月活动总结
2015/05/07 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
如何使用php生成zip压缩包
2021/04/21 PHP
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL