我们有几个在线数据来源(数字):
[ 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值则强调其中一些等)。所以我还需要存储关于每个数字的一些额外属性。存储这些数据+关于它们的属性的最佳数据结构是什么?
更新: 由于有人说解决方案取决于我想对这些数字做什么,我会尝试更好地解释:
答案 0 :(得分: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 :(得分:1)
使用基本python数据结构的自定义数据结构
这是数据(以及元值)的来源:
line1
现在,
list
,其中tuples
与文件中的行数一样多。{/ li>
TupleName
,第二个元素是存储数字数据的list
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
或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属性。