【问题标题】:reading an array with missing data and spaces in the first column读取第一列中缺少数据和空格的数组
【发布时间】:2014-02-11 20:21:11
【问题描述】:

我有一个.txt 文件,我想使用pyhon 读取。该文件是array。它包含彗星的数据。我从 3000 行中复制了 3 行。

P/2011 U1 PANSTARRS               1.54 0.5   14.21 145.294 352.628 6098.07
P/2011 VJ5 Lemmon                 4.12 0.5    2.45 139.978 315.127 5904.20 *
149P/Mueller 4                    3.67 0.1    5.32  85.280  27.963 6064.72

我正在使用以下代码读取数组:

import numpy as np
list_comet = np.genfromtxt('jfc_master.txt', dtype=None)

我面临两个不同的问题:

首先,在row 1,彗星的名字是:P/2011 U1 PANSTARRS。如果我输入: list_comet[0][1] 结果将是 P/2011。我应该如何告诉 python 如何读取每颗彗星的名称?请注意,最长的名称为 31 个字符。那么告诉pythoncolumn 131 characters long的命令是什么?

第二,在row 2中最后一列的值为*。当我阅读文件时,我收到一条错误消息:

Line #2941 (got 41 columns instead of 40)

(注意上面的数据不是完整的数据,我的原始数据总共有38列)。我想我收到此错误是由于在某些行中发现了*。我该如何解决这个问题?

【问题讨论】:

    标签: python arrays delimiter missing-data


    【解决方案1】:

    您没有提及您要查找的数据结构,即您打算对解析的数据执行哪些操作。在最简单的情况下,您可以将文件按摩成一个 8 元组列表 - 最后一个元素是 '*' 或空字符串。就这么简单

    import string
    
    def tokenize(s):
        if s[-1] == '*':
            return string.rsplit(s, None, 7)
        else:
            return string.rsplit(s, None, 6) + ['']
    
    tokens = (tokenize(line.rstrip()) for line in open('so21712204.txt'))
    

    公平地说,这不会使 tokens 成为一个 8 元组列表,而是一个列表生成器(更节省空间),每个列表有 8 个元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-01
      • 2017-08-29
      • 2013-01-04
      • 1970-01-01
      • 2015-12-20
      • 2017-06-01
      • 2013-10-07
      • 1970-01-01
      相关资源
      最近更新 更多