使用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中的过程

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值