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 相关文章推荐
apache部署python程序出现503错误的解决方法
Jul 24 Python
Python3 XML 获取雅虎天气的实现方法
Feb 01 Python
python随机取list中的元素方法
Apr 08 Python
查看python安装路径及pip安装的包列表及路径
Apr 03 Python
Python 串口读写的实现方法
Jun 12 Python
python调用webservice接口的实现
Jul 12 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
Jan 03 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
windows、linux下打包Python3程序详细方法
Mar 17 Python
Python使用pyyaml模块处理yaml数据
Apr 14 Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 Python
详解pytorch创建tensor函数
Mar 22 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
2015/02/13 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
解决VueCil代理本地proxytable无效报错404的问题
2020/11/07 Javascript
python实现计算资源图标crc值的方法
2014/10/05 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
Python制作动态字符图的实例
2019/01/27 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
Python如何批量生成和调用变量
2020/11/21 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
大专自我鉴定范文
2013/10/23 职场文书
欢迎词范文
2015/01/27 职场文书
党支部书记岗位职责
2015/02/15 职场文书
mysql如何配置白名单访问
2021/06/30 MySQL
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL
利用js实现简单开关灯代码
2021/11/23 Javascript