2014-02-11 93 views
0

我有一個.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) 

我面對2個不同的問題:

首先,在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)。我想我正在收到此錯誤,因爲在某些行中發現了*。我該如何解決這個問題?

回答

0

您沒有提及您要查找的數據結構,即您打算對解析的數據執行哪些操作。在最簡單的情況下,您可以將文件按摩到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個元素。

相關問題