读取第一列中缺少数据和空格的数组

2024-04-25 17:40:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个.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个字符。那么是什么命令告诉python column 131 characters长的呢?你知道吗

,在row 2中,最后一列的值是*。当我读取文件时,我收到一个错误,上面说:

Line #2941 (got 41 columns instead of 40)

(请注意,以上数据不是完整的数据,我的原始数据中的列总数是38)。我想我收到这个错误是因为在某些行中发现了*。我怎样才能解决这个问题?你知道吗


Tags: 文件数据txt名称错误nparraylist
1条回答
网友
1楼 · 发布于 2024-04-25 17:40:17

你没有提到你要找的是什么样的数据结构,也就是说,你打算对解析后的数据执行什么操作。在最简单的情况下,您可以将文件转换为一个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个元素。你知道吗

相关问题 更多 >