2012-07-24 58 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格式。你需要知道如何使用它们来应用关于属性。