使用Python按特定方式读取txt中的数据

        python 读写txt相关的文章很多,但是你使用时不一定顺手,这主要是各人的任务需求不同导致导致的,在此写这篇博客,一是做些笔记,因为我的读取任务比较特殊;二是这是比较完整使用python 读取txt的一个过程。出于这两方面考虑我就写写吧

        上面我说过我的读取任务比较特殊,不太好描述,直接看数据比较简洁:

194
Pnt1:254.674,379.058
Pnt2:182.251,376.755
D2SamplePntSet:254.674,379.058,253.213,379.012,251.751,378.965,250.288,378.919,248.824,378.872,247.359,378.826,245.893,378.779,244.425,378.732,242.956,378.686,241.487,378.639,240.016,378.592,238.544,378.545,237.071,378.499,235.596,378.452,234.121,378.405,232.644,378.358,231.166,378.311,229.687,378.264,228.207,378.217,226.726,378.169,225.244,378.122,223.76,378.075,222.275,378.028,220.79,377.981,219.303,377.933,217.814,377.886,216.325,377.839,214.834,377.791,213.343,377.744,211.85,377.696,210.356,377.649,208.861,377.601,207.364,377.554,205.867,377.506,204.368,377.458,202.868,377.411,201.367,377.363,199.865,377.315,198.361,377.267,196.857,377.22,195.351,377.172,193.844,377.124,192.336,377.076,190.826,377.028,189.316,376.98,187.804,376.932,186.291,376.884,184.777,376.835,183.262,376.787,181.745,376.739,180.227,376.691,178.709,376.642,177.188,376.594
RMultEdgeCnterPntSet1(PntNum=53):
254.162,390.026
252.932,390.003
251.201,389.98
249.961,390.457
248.479,390.433
246.989,390.91
245.514,390.387
244.022,390.863
242.788,390.84
241.045,391.316
239.825,390.293
238.105,389.27,238.018,394.769
236.86,389.246,236.507,395.745
235.123,389.223,235.02,395.721
233.893,388.7,233.782,395.698
232.163,388.176,232.052,395.175
231.051,380.155,230.94,387.153,230.821,394.651
229.812,380.131,229.209,386.63,229.081,394.628
228.08,379.608,227.977,386.106,227.849,394.104
226.847,379.084,226.486,386.083,226.117,393.581
225.114,378.561,224.987,386.559,224.876,393.557
223.872,378.537,223.503,386.036,223.126,394.034
222.13,378.514,222.019,385.512,221.883,394.01
220.887,378.49,220.807,383.489,220.236,387.988,220.14,393.986
219.151,377.967,219.04,384.965,218.897,393.963
217.907,377.943,217.804,384.441,217.161,393.439
216.067,383.918,215.916,393.415
214.83,383.394,214.171,393.392
213.124,380.871,212.925,393.368
211.877,380.847,211.179,393.344
210.146,379.824,209.94,392.821
208.899,379.8,208.192,392.797
207.134,380.776,206.952,392.273
205.925,378.253,205.854,382.752,205.453,391.999
204.136,380.228,203.946,392.225
202.894,379.705,202.462,391.202
201.184,377.182,201.112,381.68,200.961,391.178
199.901,379.157,199.468,390.654
198.133,380.133,197.982,389.631
196.889,379.609,196.504,388.107
195.136,379.585,195.016,387.083,194.873,396.081
193.89,379.061,193.771,386.559,193.12,396.057
192.033,385.536,191.929,392.034
190.778,385.512,190.183,391.51
189.047,383.988,188.943,390.486
187.791,383.964,187.195,389.963
185.939,389.938
184.198,388.915
182.94,388.891,182.861,393.889
181.182,388.866,181.102,393.865
179.931,388.342,179.844,393.841
178.179,387.818
176.935,386.794
RMultEdgeCnterPntSet2(PntNum=53):
0,4000
0,4000
0,4000
0,4000
0,4000
0,4000
0,4000
0,4000
243.034,375.344
241.791,375.82,241.99,363.323
240.056,375.797,240.472,365.299
238.828,375.274,238.986,365.276
237.083,375.5,237.766,364.253
235.83,376.226,236.013,364.729,236.195,353.232
234.775,364.706,234.958,353.209
233.045,364.182,233.501,351.186
231.147,374.156,231.853,361.16,231.917,357.161,232.044,349.163
229.939,372.133,230.146,359.137,230.805,349.139
228.207,371.61,228.874,361.113,229.033,351.115
226.863,378.085,226.982,370.587,227.133,361.089,227.8,350.592
225.122,378.061,225.491,370.563,225.892,361.065,226.067,350.068
223.88,378.038,223.999,370.539,224.166,360.042,224.833,349.545
222.146,377.514,222.781,369.016,222.924,360.019,223.099,349.021
220.911,376.991
219.167,376.967,219.778,369.969,219.921,360.971
217.923,376.943,218.05,368.945,218.169,361.447
216.933,360.924,216.996,356.925
215.06,368.898,215.759,356.401
213.822,368.374
212.084,367.851
210.845,367.327,211.059,353.831
209.105,366.803,209.812,353.807
207.182,377.777,207.857,366.78,208.048,354.783
205.933,377.753,206.108,366.756,206.799,354.759
204.184,377.229,204.851,366.732,204.994,357.734,205.065,353.235
202.934,377.205,203.093,367.208
201.184,377.182,201.819,368.684
199.932,377.158,200.06,369.16
198.808,369.136
0,4000
195.199,375.586
193.954,375.062
192.2,375.038,192.946,359.542
191.207,358.519
189.952,358.495
188.196,358.47
186.94,358.446
185.183,358.422
183.925,358.398
182.167,358.374
180.908,358.35
179.156,357.826
177.904,357.302

这里只是截取了一部分数据,后面的数据和这个相似不在此展示,因此读zhe这个数据的python程序如下:

#2018/2/25 by DQ
# 此程序为读取CAD导出的边缘点信息数据
# 此程序写的非常棒,现在感觉Python 和Matlab 一样非常好用,他们两个越来越像了
# 由于采用了强制缩进就是感觉读Python 代码,结尾不是很好找呀

import numpy as NP

def GetPntLoc(LineData):
    DataStr = LineData[5:]
    StrList = DataStr.split(',')
    DataList = list(map(float, StrList))

    return DataList


def GetSamplePnt(LineData):
    DataStr = LineData[15:]
    StrList = DataStr.split(',')
    DataList = list(map(float, StrList))
    ArrayVal0 = NP.array(DataList)
    ArrayVal = ArrayVal0.reshape(-1, 2)
    SamplePntLoc = ArrayVal.tolist()

    return SamplePntLoc


def GetRMultEdgeCnterPntSet(LineData, FId):
    StrLen = len(LineData)
    PntNumStr = LineData[22:StrLen - 3]
    PntNumStrList = PntNumStr.split('=')
    PntNum = int(PntNumStrList[1])

    CurLineMultEdgePntSet = []
    for i in range(PntNum):
        LineData = FId.readline()
        StrList = LineData.split(',')
        FloatList = list(map(float, StrList))
        ArrayVal0 = NP.array(FloatList)
        ArrayVal = ArrayVal0.reshape(-1, 2)
        CurLineMultEdgePnt = ArrayVal.tolist()
        CurLineMultEdgePntSet.append(CurLineMultEdgePnt)

    return CurLineMultEdgePntSet, FId


Folder = 'E:\EdgeInfoData\LocData'
FileName = 'LineD2EdgePntInfo2.txt'
FilePath = Folder + '\\' + FileName
FId = open(FilePath)

Pnt1Set = []
Pnt2Set = []
SamplePntSet = []
RMultEdgeCnterPntSet1 = []
RMultEdgeCnterPntSet2 = []
while True:
    LineData = FId.readline()
    if not LineData:
        break
    else:
        # 读取块中第一行
        StrList = LineData.split(':')
        if StrList:
            FlagStr = StrList[0]
            if FlagStr == 'Pnt1':
                DataList = GetPntLoc(LineData)
                Pnt1Set.append(DataList)

                # 读取块中第二行
                LineData = FId.readline()
                StrList = LineData.split(':')
                if StrList:
                    FlagStr = StrList[0]
                    if FlagStr == 'Pnt2':
                        DataList = GetPntLoc(LineData)
                        Pnt2Set.append(DataList)

                        # 读取块中第三行
                        LineData = FId.readline()
                        StrList = LineData.split(':')
                        FlagStr = StrList[0]
                        if FlagStr == 'D2SamplePntSet':
                            DataList = GetSamplePnt(LineData)
                            SamplePntSet.append(DataList)

                            # 读取块中第四行
                            LineData = FId.readline()
                            FlagStr = LineData[:21]
                            if FlagStr == 'RMultEdgeCnterPntSet1':
                                CurLineMultEdgePntSet, FId = GetRMultEdgeCnterPntSet(LineData, FId)
                                RMultEdgeCnterPntSet1.append(CurLineMultEdgePntSet)

                                # 读取块中第五行
                                LineData = FId.readline()
                                FlagStr = LineData[:21]
                                if FlagStr == 'RMultEdgeCnterPntSet2':
                                    CurLineMultEdgePntSet, FId = GetRMultEdgeCnterPntSet(LineData, FId)
                                    RMultEdgeCnterPntSet2.append(CurLineMultEdgePntSet)
FId.close()
print(RMultEdgeCnterPntSet2)

好了至此就完成了python读取txt数据存放在list中的过程

猜你喜欢

转载自blog.csdn.net/lingyunxianhe/article/details/81072580