2013-03-06 2 views
0

У меня есть программа, которая читает кучу файлов и добавляет необходимые мне данные. Мне нужно теперь взять эти конкретные данные и показать их как список. Более конкретно, это параметры, которые у меня есть:Создание столбцов списков данных в python

a = Источник, b = яркость, c = погрешность яркости, d = HST, e = XRS, f = gmag, g = z и h = rh

Я хочу отобразить это в списке, каждый из которых определяет конкретный столбец. Я просто не знаю, где именно я должен вставить оператор печати среди различных циклов, которые я сделал для этого.

Буду признателен за любую помощь! Вот программа (основное внимание уделяется выполненным циклам и тому, как они перебирают данные, и не беспокоиться о углублениях, программа пока работает, мне просто нужно отобразить данные, добавленные в столбцах):

import sys 
    import os 
    import re 
    import urllib 
    import urllib2 
    from os.path import basename 
    import urlparse 
    import shutil 


    base_dirname = '/projects/XRB_Web/apmanuel/499/' 
    base_sourcefile = base_dirname + 'Sources.txt' 

    try: 
     file = open(base_sourcefile, 'r') 
    except IOError: 
     print 'Cannot open: '+base_sourcefile 

    Source = [] 
    Finallist = [] 
    ACS = [] 
    SRC = [] 


    for line in file: 
     data_line_check = (line.strip()) 
     if data_line_check: 

     line = re.sub(r'\s+', ' ', line) 
     point = line.split('|') 
     temp_source = (point[0]).strip() 
     if temp_source and len(point) == 3: 
       Source = (point[0]).strip() 
       Source = re.sub(r'\s', '_', Source) 
       print Source+"\n" 

     temp_finallist = (point[1]).strip() 
     if temp_finallist: 
      Finallistaddress = (point[1]).strip() 
      Finallistaddress = re.sub(r'\s', '_', Finallistaddress) 
      Luminositybase_dirname1 = '/projects/XRB_Web/apmanuel/499/Lists/' + Finallistaddress 


    try: 
     file2 = open(Luminositybase_dirname1, 'r') 
    except IOError: 
     print 'Cannot open: '+Luminositybase_dirname1 

    source = [] 
    luminosity = [] 
    luminosityerr = [] 

    for line in file2: 
     pointy = line.split() 
    a = int(pointy[0]) 
     b = float(pointy[5]) 
     c = float(pointy[6]) 

     source.append(a) 
     luminosity.append(b) 
     luminosityerr.append(c) 

     temp_HST = (point[2]).strip() 
     if temp_HST: 
      HSTaddress = (point[2]).strip() 
      HSTaddress = re.sub(r'\s', '_', HSTaddress) 
      HSTbase_dirname2 = '/projects/XRB_Web/apmanuel/499/Lists/' + HSTaddress 


    try: 
     file3 = open(HSTbase_dirname2, 'r') 
    except IOError: 
     print 'Cannot open: '+HSTbase_dirname2 

    HST = [] 

    for line in file3: 
    pointy2 = line.split() 
    d = int(pointy2[0]) 
     HST.append(d) 

     temp_XRS = (point[3]).strip() 
     if temp_XRS: 
     XRSaddress = (point[3]).strip() 
     XRSaddress =re.sub(r'\s', '_', XRSaddress) 
     XRSbase_dirname3 = '/projects/XRB_Web/apmanuel/499/Lists/' + XRSaddress 


    try: 
     file4 = open(XRSbase_dirname3, 'r') 
    except IOError: 
     print 'Cannot open: '+XRSbase_dirname3 

    XRS = [] 

    for line in file4: 
    pointy3 = line.split() 
    e = int(pointy3[0]) 
     XRS.append(e) 

    temp_others = (point[4]).strip() 
    if temp_others: 
     othersaddress = (point[4]).strip() 
     othersaddress =re.sub(r'\s', '_', othersaddress) 
     othersbase_dirname4 = '/projects/XRB_Web/apmanuel/499/Lists/' + othersaddress 

    try: 
     file5 = open(othersbase_dirname4, 'r') 
    except IOError: 
     print 'Cannot open: '+othersbase_dirname4 

    gmag = [] 
    z = [] 
    rh = [] 

    for line in file5: 
    pointy4 = line.split() 
    f = float(pointy4[3]) 
     g = float(pointy4[5]) 
     h = float(pointy4[7]) 
     rh.append(f) 
     gmag.append(g) 
     z.append(h) 
+0

Кажется невероятно обратным способом назвать ваши переменные как «a, b, c, e, f, g ...», а затем должны явно называть их для нас. Почему бы просто не использовать имена переменных, например 'source, luminosity, luminosity_error, hst, xrs ...'? – msvalkon

+0

Извините, я просто указывал на общий макет проблемы. До сих пор я думал о принятии циклов for внутри инструкции def(), а затем распечатывать цикл, но это только пугает меня. –

+0

Считаете ли вы использование [Pandas] (http://pandas.pydata.org/)? Вероятно, это упростит ваш код сканирования файлов и позволит вам сосредоточиться на анализе данных. В частности, посмотрите документацию по чтению текстовых файлов с помощью [IO Tools] (http://pandas.pydata.org/pandas-docs/stable/io.html#csv-text-files). – crayzeewulf

ответ

0

Эта функция возвращает столбцы для списка строк. обратите внимание, что для этого требуется, чтобы все списки имели элемент в столбце, к которому вы пытаетесь получить доступ, хотя было бы относительно просто изменить это, если вам это нужно.

def getcolumn(matrix,index):  #index specifies which column of the matrix you want. note that like all other list indexes, this starts from 0, not one. 
    column = [] 
    for row in matrix: 
     column.append(row[index]) 
    return column 
Смежные вопросы