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使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
python中字典(Dictionary)用法实例详解
May 30 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 Python
两个命令把 Vim 打造成 Python IDE的方法
Mar 20 Python
python实现栅栏加解密 支持密钥加密
Mar 20 Python
python 判断文件还是文件夹的简单实例
Jun 10 Python
pytest中文文档之编写断言
Sep 12 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
Python实现RabbitMQ6种消息模型的示例代码
Mar 30 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
Sep 29 Python
python中xlutils库用法浅析
Dec 29 Python
python FTP编程基础入门
Feb 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编程开发“虚拟域名”系统
2006/10/09 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
通俗易懂的php防注入代码
2010/04/07 PHP
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
2014/01/14 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
element中的$confirm的使用
2020/04/26 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
中国跨境海淘网站:考拉海购
2016/08/01 全球购物
药学专业大学生个人的自我评价
2013/11/04 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
举起手来观后感
2015/06/09 职场文书
2016年党建工作简报
2015/11/26 职场文书
计算机实训心得体会
2016/01/14 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
vue组件vue-esign实现电子签名
2022/04/21 Vue.js