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异常学习笔记
Feb 03 Python
Python的GUI框架PySide的安装配置教程
Feb 16 Python
Python反射用法实例简析
Dec 22 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
Python中调用其他程序的方式详解
Aug 06 Python
python程序中的线程操作 concurrent模块使用详解
Sep 23 Python
实现ECharts双Y轴左右刻度线一致的例子
May 16 Python
Django项目创建及管理实现流程详解
Oct 13 Python
Python3压缩和解压缩实现代码
Mar 01 Python
Pytorch 如何实现LSTM时间序列预测
May 17 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 30 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防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP中array_map与array_column之间的关系分析
2014/08/19 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
利用js对象弹出一个层
2008/03/26 Javascript
5款Javascript颜色选择器
2009/10/25 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
基于form-data请求格式详解
2019/10/29 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
用Python给文本创立向量空间模型的教程
2015/04/23 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
2018/11/29 Python
Python并发:多线程与多进程的详解
2019/01/24 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
怎样声明一个匿名的内部类
2016/06/01 面试题
《两个铁球同时着地》教学反思
2014/02/13 职场文书
《大海那边》教学反思
2014/04/09 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
基于redis+lua进行限流的方法
2022/07/23 Redis
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技