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 相关文章推荐
Python3基础之基本数据类型概述
Aug 13 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
Python 爬虫模拟登陆知乎
Sep 23 Python
用python记录运行pid,并在需要时kill掉它们的实例
Jan 16 Python
Python 40行代码实现人脸识别功能
Apr 02 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
Feb 18 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
对python实现模板生成脚本的方法详解
Jan 30 Python
Python爬虫实现验证码登录代码实例
May 10 Python
Python 点击指定位置验证码破解的实现代码
Sep 11 Python
Django 框架模型操作入门教程
Nov 05 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
Feb 28 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 jQuery表单,带验证具体实现方法
2014/02/15 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
sqlalchemy对象转dict的示例
2014/04/22 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
database面试题
2013/03/28 面试题
中文系学生自荐信范文
2013/11/13 职场文书
我的祖国演讲稿
2014/05/04 职场文书
教师工作决心书
2015/02/04 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
法院执行局工作总结
2015/08/11 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers