基本的なPythonデータ構造を使用したカスタムデータ構造
データ(およびメタ値)は次のとおりです。
- ファイルには数行あります。そのため、各行に名前を付けます。言う
line1
- 各行にはいくつかの番号があり、それぞれにいくつかの属性があります。
今、
list
ファイル内の行数と同じ数のを構築tuples
します。
- 各タプルの最初の要素は
TupleName
であり、2番目の要素はlist
数値データを格納するaです。
- 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
ため、追加、削除、編集、またはのメソッドを定義するattributes
aを記述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属性を適用するには、それらの使用方法を知る必要があります。