栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

筛选出文件读取的数组中连续的部分并输出(Python实现)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

筛选出文件读取的数组中连续的部分并输出(Python实现)

原始需求:

从数据中提取这些数字,判断是否存在连续:如果连续,那么根据格式化输出要求,startNum为连续数字的头,endNum为连续数字的尾部;如果不连续,那么startNum和endNum均为为当前数字本身,最终实现格式化打印或者写入一个文件两种不同的输出模式,id从10000开始计算。

原始数据:

“123456789”
“123456790”
“123452789”
“123453789”


“123456792”
“123456793”
“123456794”
“123456799”
...

期望输出:

当前id为:10000, startNum:123456789, endNum:123456790
当前id为:10001, startNum:123452789, endNum:123452789
当前id为:10002, startNum:123453789, endNum:123453789
当前id为:10003, startNum:123456792, endNum:123456794
当前id为:10004, startNum:123456799, endNum:123456799
实现思路:
    从文件中读取数据,并且提取数据中的数字部分存放在一个数组里面构建一个二维数组,将提取的数字判断是否有连续的,如果有就将连续的数字作为一个一维数组存放入二维数组;如果没有就单独作为一个一维数组存入;
输出格式如下:
[[123456789, 123456790], [123452789], [123453789], [123456792, 123456793, 123456794], [123456799]]
    根据输出要求,判断二维数组的长度来确定需要填入的头部数字和尾部数字是否一致,最终实现格式化输出
实现代码:
# python 3.7实现
import os
import re

class ExtractNumberInfo():
    def __init__(self):
        self.current_path = os.getcwd()
        # ======此处修改输入输出文件名称=======================
        self.outputFileName = "text2.txt"
        self.readFileName = "text.txt"
        # =================================================
        self.id = 9999
        self.read_nums=[]
        self.before_nums=[]
        self.string=''

    # 检查是否存在输出文件,如果存在就删除
    def checkFile(self):
        file_path = self.current_path+"\"+self.outputFileName
        if os.path.exists(file_path):
            os.remove(file_path)
            
    # 读取数据
    def readFile(self):
        f = open(self.readFileName,'r',encoding="utf8")
        count=0
        for line in f.readlines():
            count+=1
            line = line.strip('n')
            num = re.findall('d+',line)
            if len(num) !=0:
                self.read_nums.append(int(num[0]))
            else:
                print("存在空行,在第"+str(count)+"行,我已经删除了.")
                continue
        f.close()

    # 提取数组中连续的数字形成新的数组
    def extractContinuousNumbers(self):
        i=0
        tempOne=[]
        for index in range(len(self.read_nums)):
            result = int(self.read_nums[index])
            if(i == result ):
                tempOne.append(i)
                i+=1
                continue
            if(len(tempOne)>1):
                self.before_nums.pop(-1)
                self.before_nums.append(tempOne)
            tempOne=[result ]
            i=int(result )+1
            self.before_nums.append(tempOne)
            
    def outputFile(self):
        for i in range(len(self.before_nums)):
            self.id +=1
            temp=self.before_nums[i]
            if(len(temp)>1):
                prev=temp[0]
                last=temp[-1]
                #print("prev:"+str(prev)+", last:"+str(last))
                self.outPutFormatString(prev,last)
            else:
                prev=temp[0]
                self.outPutFormatString(prev,prev)
            self.outPutModel(self.flag)
     
    def outPutFormatString(self,prev,last):
        # ======此处修改输出格式化语句=======================
        tempString="当前id为:"+str(self.id)+", startNum:"+str(prev)+", endNum:"+str(last)
        # ====================================================
        if self.flag:
            self.string=tempString+"n"
        else:
            self.string=tempString

    def outPutModel(self,flag):
        if flag:
            with open(self.outputFileName,'a',encoding='utf8') as w:
                w.write(self.string)
        else:
            print(self.string)
            
    def run(self,flag):
        self.flag = flag
        self.checkFile()
        self.readFile()
        self.extractContinuousNumbers()
        self.outputFile()
        print("执行完成!")

        
if __name__ == '__main__':
	app = ExtractNumberInfo()
	# flag表示输出数据模式,True表示写入文件,False表示命令行输出,在此处修改即可。
	app.run(False)

注意事项:
    flag表示输出数据模式,True表示写入文件,False表示命令行输出,需要在调用的时候传入。格式化的输出字符串在写入文件的时候已经默认添加了,因此不需要再单独加“n”符号格式化字符串如果需要添加引号这些特殊符号,需要添加反斜杠进行转义连续的数组会只打印一个id号,id自动向前累计
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/756873.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号