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解释执行原理分析
Aug 22 Python
Python简单删除目录下文件以及文件夹的方法
May 27 Python
解决Django模板无法使用perms变量问题的方法
Sep 10 Python
对Python发送带header的http请求方法详解
Jan 02 Python
python字符串循环左移
Mar 08 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
python实现文件的分割与合并
Aug 29 Python
通过python检测字符串的字母
Feb 18 Python
python用pip install时安装失败的一系列问题及解决方法
Feb 24 Python
利用Python判断整数是否是回文数的3种方法总结
Jul 07 Python
python的netCDF4批量处理NC格式文件的操作方法
Mar 21 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 xml留言板 xml存储数据的简单例子
2009/08/24 PHP
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
JS中表单的使用小结
2014/01/11 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
详解JS函数stack size计算方法
2018/06/18 Javascript
详解ES6中class的实现原理
2020/10/03 Javascript
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
Django设置Postgresql的操作
2020/05/14 Python
澳洲的服装老品牌:SABA
2018/02/06 全球购物
Java如何格式化日期
2012/08/07 面试题
店长岗位职责
2013/11/21 职场文书
成人继续教育实施方案
2014/03/01 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
神秘岛读书笔记
2015/07/01 职场文书
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python