Crossin的编程教室

标题: [新人求助]如何高效读取txt文件中的不规则数据 [打印本页]

作者: 方自之    时间: 2017-6-22 08:10
标题: [新人求助]如何高效读取txt文件中的不规则数据
各位老铁,新人请教问题:如何高效读取复杂格式txt文件?
说明:txt中以实型数组为主,但有必要的字符串信息,且每行格式不固定,请问该怎么高效读取。
本人小白,之前常用两种入门操做:1、先readlines,再切片resahpe。2、用numpy的genfromtxt。附图为txt文件内容,求老司机带路。
如图:polygon后的数字代表行数xxx,之后的xxx行为一组数据,然后会出现polygo  yyy,之后yyy行为另一组数据,一次类推。
这数据数据表示流域的位置。每条流域都有若干个位置点来描述,且有顺序,每个位置点都有2个要素,即经纬度。我的一个文件里有若干条河流。那么请问应该用什么数据结构比较好呢?

原文件有点大,25M,传不了


微信截图_20170620110614.png (14.74 KB, 下载次数: 351)

数据格式

数据格式


作者: crossin先生    时间: 2017-6-22 23:49
不用readlines一次读进内存,可以readline逐行读取处理。

数据结构就用列表,列表每一项是一个经纬度坐标组成的元组
作者: 方自之    时间: 2017-6-23 10:08
crossin先生 发表于 2017-6-22 23:49
不用readlines一次读进内存,可以readline逐行读取处理。

数据结构就用列表,列表每一项是一个经纬度坐标 ...

谢谢C先生在微信和论坛的悉心指导,目前已经初步实现,有待优化。
  1. # -*- coding: utf-8 -*-
  2. import numpy as np
  3. f = file('.\\scream_area.txt','r')

  4. data = f.readlines()

  5. line= len(data)                     #遍历参数
  6. n=0
  7. i=0
  8. fin=[]                              #最终大列表数据结构
  9. for i in range(line):               #逐行识别PLOYGON
  10.          

  11.          data_1=data[i]
  12.          polygon=str(data_1.split()[0])
  13.          
  14.          if polygon=='POLYGON' :
  15.                   num_points= int(data_1.split()[1])
  16.                   liuyu = data[i+1:i+1+num_points]
  17.                   fin.append(liuyu)
  18.                   

  19.                   n=n+1
  20. #                  print num_points
  21.                   
  22. #                  print np.shape(liuyu)


  23. #print fin[756]
  24. f.close()


  25. print n
复制代码





欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5