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的Django框架与认证系统整合的方法
Jul 24 Python
Python采用Django开发自己的博客系统
Sep 29 Python
Python批量查询域名是否被注册过
Jun 21 Python
python实现校园网自动登录的示例讲解
Apr 22 Python
python利用插值法对折线进行平滑曲线处理
Dec 25 Python
python实现转圈打印矩阵
Mar 02 Python
用python求一个数组的和与平均值的实现方法
Jun 29 Python
Django实现跨域的2种方法
Jul 31 Python
详解Python3迁移接口变化采坑记
Oct 11 Python
jupyter notebook 多环境conda kernel配置方式
Apr 10 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
Jul 03 Python
LeetCode189轮转数组python示例
Aug 05 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
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
php相当简单的分页类
2008/10/02 PHP
php打开远程文件的方法和风险及解决方法
2013/11/12 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
php防止用户重复提交表单
2015/11/02 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
PHP中常用的魔术方法
2017/04/28 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
整理8个很棒的 jQuery 倒计时插件和教程
2011/12/12 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
详谈JavaScript内存泄漏
2014/11/14 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
vue移动端微信授权登录插件封装的实例
2018/08/28 Javascript
react同构实践之实现自己的同构模板
2019/03/13 Javascript
layui动态表头的实现代码
2019/08/22 Javascript
Python中用max()方法求最大值的介绍
2015/05/15 Python
听歌识曲--用python实现一个音乐检索器的功能
2016/11/15 Python
深入理解Python分布式爬虫原理
2017/11/23 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
Python @property装饰器原理解析
2020/01/22 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
RentCars.com巴西:汽车租赁网站
2016/08/22 全球购物
生日庆典策划方案
2014/06/02 职场文书
物联网工程专业推荐信
2014/09/08 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
六年级学生评语大全
2014/12/26 职场文书
红色经典观后感
2015/06/18 职场文书