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教程之用py2exe将PY文件转成EXE文件
Jun 12 Python
python中map、any、all函数用法分析
Apr 21 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
python3编码问题汇总
Sep 06 Python
深入理解Python中变量赋值的问题
Jan 12 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
Apr 18 Python
Python对CSV、Excel、txt、dat文件的处理
Sep 18 Python
python通过tcp发送xml报文的方法
Dec 28 Python
Python3+Appium安装使用教程
Jul 05 Python
python3.5 cv2 获取视频特定帧生成jpg图片
Aug 28 Python
python中PyQuery库用法分享
Jan 15 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
PHP5 面向对象程序设计
2008/02/13 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
2019/05/09 PHP
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
超级好用的jQuery圆角插件 Corner速成
2014/08/31 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
jQuery 控制文本框自动缩小字体填充
2017/06/16 jQuery
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
vue滚动固定顶部及修改样式的实例代码
2019/05/30 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
python学习手册中的python多态示例代码
2014/01/21 Python
Django中URLconf和include()的协同工作方法
2015/07/20 Python
python入门基础之用户输入与模块初认识
2016/11/14 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
Python中正则表达式的用法总结
2019/02/22 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
Python实现播放和录制声音的功能
2020/08/12 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
python+flask编写一个简单的登录接口
2020/11/13 Python
青年安全生产示范岗事迹材料
2014/05/04 职场文书
公司年终奖分配方案
2014/06/16 职场文书
环保志愿者活动总结
2014/06/27 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
个人债务授权委托书
2014/10/17 职场文书
php字符串倒叙
2021/04/01 PHP
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python