2012-07-24 51 views
2

我們有在線數據的幾個來源(數字):蟒蛇 - 存儲輸入數據變量數列和屬性

 
[ source 1 ] 
1 52 61 17 
1 2 2 12 
31 4 42 1 


[ source 2 ] 

2 52 6 2 1 2 
2 37 4 5 4 35 
2 3 74 5 93 7 
3 83 8 8 65 0 

[ source X ] 
... 

正如你可以看到有不同數量的每個源列。我想要做的是閱讀(使用相同的腳本所有數據源)中的所有行,但在某種程度上讓我對這個數字(即右對齊他們,強調他們中的一些,如果他們是更大然後Y值操作等)。所以我需要存儲一些關於每個數字的附加屬性。什麼是最好的數據結構來存儲這些數據+關於它們的屬性?

UPDATE: 由於一些說,該解決方案取決於什麼,我想這些數字做我會試着更好地解釋:

    *我想他們比作從以前的線,但是從價值同一列
    *如果它們差異很大(很多=由我自己定義)我想記錄它並以特定格式打印它們(它們將打印在控制檯上)
    *如果它們超過/低於某一特定值I將記錄哪一列,調整對準等排隊起來
+1

「*下劃線*」 - 它應該是什麼樣子? – eumiro 2012-07-24 13:45:01

+4

歡迎來到Stack Overflow!我們鼓勵你[研究你的問題](http://stackoverflow.com/questions/how-to-ask)。如果你已經[嘗試了某些東西](http://whathaveyoutried.com/),請將其添加到問題中 - 如果沒有,請先研究並嘗試您的問題,然後再回來。 – 2012-07-24 13:45:08

+0

有很多選擇,取決於你想要對你的數據做什麼:列表,Numpy,SQL,... – 2012-07-24 13:48:32

回答

1

我會嘗試這樣的事情(純Python):

rows = [] 
for source in list_of_filenames: 
    with open(source) as f: 
     for line in f: 
      if line == '' or line.isspace(): 
       continue 
      rows.append([(int(num), {}) for num in line.split()]) 

這會給你一個元組的列表的列表。每個元組將包含一個數字和一個字典,您可以在其中存儲元數據。

1

通過使用基本蟒數據結構

這是數據(連同元值)是如何自定義數據結構:

  • 有許多有若干行文件。所以,我們爲每行分配一個名稱。說line1
  • 每一行都將有幾個號碼,每次都會有一些屬性。

現在,

  1. 我們構建一個list,其中有許多tuples在文件中的行數。
  2. 每個元組的第一個元素是TupleName和第二元件是一個list存儲數字數據
  3. 在第二元件,有儘可能多的元組作爲連續的數字。其中每個元組包括number和屬性dict

例子:

data_structure = [ ("line1", [ ("num1", {"attr1" : value, "attr2" : value, }), 
           ("num2", {"attr1" : value, }), 
           ("num3", {}), 
          ] 
        ), 

        ("line2", [ ("num1", {"attr1" : value, "attr2" : value, }), 
           ("num2", {"attr1" : value, "attr2" : value, }), 
          ] 
        ), 

        ("line3", [ ("num1", {"attr1" : value, "attr2" : value, }), 
        ], 
] 

這顯然是一個複雜的外觀。然而,正如我們現在標準化的數據結構,我們可以寫一個class限定用於添加,刪除或編輯attributesnumberslines方法。最重要的部分是,確保您編寫一個方法,通過文件對象創建我們的數據結構。

現在,你從複雜性中解放出來。

您可以使用lists而不是tuples,但我只是爲了不干擾我們定義的數據結構而添加的。

樣例類

可能是原始的,但它應該告訴你什麼,我其實是想解釋

class data (object): 
    def __init__(self, file_name): 
     self.file_name = file_name 
     self.data = open(self.file_name, "r").readlines() 
     # The Data Str 
     self.ds = self.makeDS() 

    def getNumList(self, line_count): 
     return self.data[line_count][:-1].split() 

    def makeDS (self): 
     ds = [] 
     for eachLine in self.data: 
      line_count = self.data.index(eachLine) 
      num_list = self.getNumList(line_count) 

      eachLine_num_data = [] 
      for aNum in num_list: 
       num_attr = {} 
       eachLine_num_tuple = (aNum, num_attr) 
       eachLine_num_data.append(eachLine_num_tuple) 
      eachLine_tuple = (line_count, eachLine_num_data) 
      ds.append(eachLine_tuple) 
     return ds 

    def getAttr (self, line_count, num_count): 
     attr = self.ds[line_count][1][num_count] 
     return attr 

    def add_attr (self, line_count, num_count, 
        attr_name, attr_value): 
     attr = self.ds[line_count][1][num_count][1] 
     attr[attr_name] = attr_value 


o = data("file.txt") 
o.add_attr(0,0,"name", "value") 
print o.getAttr(0, 0) 

輸出

>>> ('2', {'name': 'value'}) 

如何申請y屬性

這有點複雜(不完全)。標準文本文件不支持(下劃線,粗體,斜體等)功能。 .docx或任何其他格式更可能是格式的openXML格式。你需要知道如何使用它們來應用關於屬性。