2

我们有几个在线数据来源(数字):

[ 来源 1 ]
1 52 61 17
1 2 2 12
31 4 42 1


[ 来源 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

[ 来源 X ]
...

如您所见,每个源中有不同数量的列。我想做的是阅读(对所有数据源使用相同的脚本)所有行,但以一种让我对这些数字进行操作的方式(即右对齐它们,如果它们大于 Y 值,则在其中一些下划线, ETC)。所以我还需要存储一些关于每个数字的附加属性。存储这些数据+关于它们的属性的最佳数据结构是什么?

更新:由于有人说解决方案取决于我想用这些数字做什么,我会尝试更好地解释:

    * 我想将它们与前一行但来自同一列的值进行比较
    * 如果它们有很大差异(很多 = 由我自己定义)我想记录它并以特定格式打印它们(它们将打印在控制台上)
    *如果它们超过/低于某个特定值,我将记录哪一列,调整对齐等以对齐它们
4

2 回答 2

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()])

这将为您提供元组列表的列表。每个元组将包含一个数字和一个字典,您可以在其中存储元数据。

于 2012-07-24T13:55:05.410 回答
1

使用基本 python 数据结构的自定义数据结构

这就是数据(连同元值)的样子:

  • 文件中有很多行。因此,我们为每一行分配一个名称。说line1
  • 每行都有几个数字,每个数字都有一些属性。

现在,

  1. 我们构造了一个文件list中有尽可能tuples多的行数。
  2. 每个元组的第一个元素是TupleName,第二个元素是list存储数字数据的
  3. 在第二个元素中,元组的数量与连续的数字一样多。其中每个元组包含numberdict属性。

例子 :

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定义添加、删除或编辑的方法attributesornumberslines。最重要的部分是,确保您编写了一个从文件对象创建我们的数据结构的方法。

现在,您摆脱了复杂性。

您可以使用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'})

如何在文件中应用属性

这有点复杂(不完全)。标准文本文件不支持(下划线、粗体、斜体 ..)等功能。或.docx任何其他格式更可能是zip archive格式openXML。您需要知道如何使用它们才能应用 about 属性。

于 2012-07-24T19:45:56.710 回答