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同时兼容python2和python3的8个技巧分享
Jul 11 Python
python下实现二叉堆以及堆排序的示例
Sep 29 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 Python
python 3.7.0 下pillow安装方法
Aug 27 Python
python使用selenium实现批量文件下载
Mar 11 Python
Python OpenCV调用摄像头检测人脸并截图
Aug 20 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
Aug 02 Python
解决Python对齐文本字符串问题
Aug 28 Python
Python版中国省市经纬度
Feb 11 Python
Python reversed函数及使用方法解析
Mar 17 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 24 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
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
php四种定界符详解
2017/02/16 PHP
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
使用Python编写vim插件的简单示例
2015/04/17 Python
Python访问纯真IP数据库脚本分享
2015/06/29 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
详解如何使用Python编写vim插件
2017/11/28 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
python实现xlsx文件分析详解
2018/01/02 Python
Python闭包函数定义与用法分析
2018/07/20 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
numpy 声明空数组详解
2019/12/05 Python
Django 限制访问频率的思路详解
2019/12/24 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
详解Python中import机制
2020/09/11 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
《社戏》教学反思
2014/04/15 职场文书
优秀家长事迹材料
2014/05/17 职场文书
授权委托书
2014/07/31 职场文书
小学运动会开幕词
2015/01/28 职场文书
小王子读书笔记
2015/06/29 职场文书
python基础入门之普通操作与函数(三)
2021/06/13 Python