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 値より大きい場合は下線を引きます)。など)。そのため、各数値についていくつかの追加属性も保存する必要があります。これらのデータとそれらに関する属性を格納するのに最適なデータ構造は何でしょうか?

更新: 解決策は、これらの数値で何をしたいかによって決まると言う人もいるので、よりよく説明しようとします:

    * それらを前の行の同じ列の値と比較したい
    * それらが大きく異なる場合 (多く = 自分で定義する) それをログに記録し、特定のフォーマットで出力したい (それらはコンソールに出力されます)
    * それらが特定の値を上回っている/下回っている場合は、どの列をログに記録し、整列などを調整して並べます
4

2 に答える 2

1

基本的なPythonデータ構造を使用したカスタムデータ構造

データ(およびメタ値)は次のとおりです。

  • ファイルには数行あります。そのため、各行に名前を付けます。言うline1
  • 各行にはいくつかの番号があり、それぞれにいくつかの属性があります。

今、

  1. listファイル内の行数と同じ数のを構築tuplesします。
  2. 各タプルの最初の要素はTupleNameであり、2番目の要素はlist数値データを格納するaです。
  3. 2番目の要素には、行の数と同じ数のタプルがあります。各タプルが属性で構成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ため、追加、削除、編集、またはのメソッドを定義するattributesaを記述numbersできますlines。最も重要な部分は、ファイルオブジェクトからデータ構造を作成するメソッドを作成することを確認することです。

今、あなたは複雑さから解放されています。

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 に答える
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 に答える