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高并发异步服务器核心库forkcore使用方法
Nov 26 Python
python 的列表遍历删除实现代码
Apr 12 Python
python微信跳一跳系列之棋子定位颜色识别
Feb 26 Python
python爬虫自动创建文件夹的功能
Aug 01 Python
python实现图片筛选程序
Oct 24 Python
pandas通过索引进行排序的示例
Nov 16 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
Python中的上下文管理器相关知识详解
Sep 19 Python
Numpy与Pytorch 矩阵操作方式
Dec 27 Python
在python里创建一个任务(Task)实例
Apr 25 Python
浅谈Python3中print函数的换行
Aug 05 Python
python实现调用摄像头并拍照发邮箱
Apr 27 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多个字符串替换成同一个的解决方法
2013/06/18 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
CI框架中cookie的操作方法分析
2014/12/12 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
如何在Angular2中使用jQuery及其插件的方法
2017/02/09 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
Express系列之multer上传的使用
2017/10/27 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
聊聊vue 中的v-on参数问题
2021/01/29 Vue.js
基于JavaScript实现随机点名器
2021/02/25 Javascript
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
Python中进程和线程的区别详解
2017/10/29 Python
python实现飞机大战微信小游戏
2020/03/21 Python
python多线程并发实例及其优化
2019/06/27 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
Python pygame绘制文字制作滚动文字过程解析
2019/12/12 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
入团者的自我评价分享
2013/12/02 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
民主评议党员工作总结
2014/10/20 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
解除合同协议书范本
2016/03/21 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python