向现有 python 个对象添加元数据
Adding metadata to existing python objects
我目前正在从 .csv 文件中读取行并将数据存储在 array.array('f') 个对象的列表中。因为我会将单独的行传递给不同的进程,所以我想为每个 array.array 对象存储一个(行)id。
我知道我显然可以通过定义一个新的 class 并封装数据来做到这一点,但我想知道是否有不同的方法可以通过向 array.array 动态添加自定义属性。好处是在访问数据本身时无需额外查找,也不必仅使用 id 和数据定义 class。
我知道元组列表也是一种选择,但在不久的将来我会想要存储可变属性。
python 的方法是什么?
您应该定义一个 MyArray
class 并将所有内容委托给 array.array
。那么您如何看待这个更简单的解决方案?
id = "your_id"
array = array.array('f', [...])
data = {id: array}
一种选择是将每一行存储在包含额外元数据的字典中。这类似于使用装饰器模式向您的类型添加元数据字段。
例如,假设您有一个这样的测试文件:
$ cat test.file
line_1
line_2
您可以执行如下操作来添加元数据:
>>> with open('./test.file','rb') as fin:
... for line in fin:
... linecount += 1
... d = {'line':line,'metadata':'a line %d' % linecount}
... lines.append(d)
...
>>> print(lines)
[{'line': 'line_1\n', 'metadata': 'a line 1'}, {'line': 'line_2\n', 'metadata': 'a line 2'}]
我目前正在从 .csv 文件中读取行并将数据存储在 array.array('f') 个对象的列表中。因为我会将单独的行传递给不同的进程,所以我想为每个 array.array 对象存储一个(行)id。
我知道我显然可以通过定义一个新的 class 并封装数据来做到这一点,但我想知道是否有不同的方法可以通过向 array.array 动态添加自定义属性。好处是在访问数据本身时无需额外查找,也不必仅使用 id 和数据定义 class。
我知道元组列表也是一种选择,但在不久的将来我会想要存储可变属性。
python 的方法是什么?
您应该定义一个 MyArray
class 并将所有内容委托给 array.array
。那么您如何看待这个更简单的解决方案?
id = "your_id"
array = array.array('f', [...])
data = {id: array}
一种选择是将每一行存储在包含额外元数据的字典中。这类似于使用装饰器模式向您的类型添加元数据字段。
例如,假设您有一个这样的测试文件:
$ cat test.file
line_1
line_2
您可以执行如下操作来添加元数据:
>>> with open('./test.file','rb') as fin:
... for line in fin:
... linecount += 1
... d = {'line':line,'metadata':'a line %d' % linecount}
... lines.append(d)
...
>>> print(lines)
[{'line': 'line_1\n', 'metadata': 'a line 1'}, {'line': 'line_2\n', 'metadata': 'a line 2'}]