Python 如何替换tablib数据集中的值?

Python 如何替换tablib数据集中的值?,python,replace,Python,Replace,我正在使用库,希望用另一个值替换具有某个值的所有条目。数据集对象似乎不支持此操作。实现这一点的最佳方法是什么?我的解决方案是在导出为字符串的数据集上调用Python的stringreplace方法,然后将字符串加载回新的数据集。要重新加载字符串,需要将其保存为内存中的流。应该可以使用更高级的字符串替换技术,如正则表达式 以下是一个例子: import tablib import io # Creating an example dataset. data = tablib.Dataset()

我正在使用库,希望用另一个值替换具有某个值的所有条目。
数据集
对象似乎不支持此操作。实现这一点的最佳方法是什么?

我的解决方案是在导出为字符串的
数据集上调用Python的string
replace
方法,然后将字符串加载回新的
数据集。要重新加载字符串,需要将其保存为内存中的流。应该可以使用更高级的字符串替换技术,如正则表达式

以下是一个例子:

import tablib
import io

# Creating an example dataset.
data = tablib.Dataset()
data.headers = ('first_name', 'last_name')
data.append(('John', 'Adams'))
data.append(('George', 'Washington'))
print(data.csv)
# Calling replace() on the formatted string and store it in a stream.
stream = io.StringIO(data.csv
                     .replace('George', 'Donald')
                     .replace('Washington', 'Trump'))
new_data = tablib.Dataset().load(stream.read(), format='csv')
print(new_data.csv)

尽管这个解决方案看起来有点“黑客”,而且这个示例也很无聊,但它似乎是可行的。

您可以使用标记创建子集,或者使用第二个中间数据集。
.height
为您提供行数,
.lpop()
返回并删除作为元组的第一行,
.append()
将行添加回去,
.stack()
将两个数据集合并在一起。您可以对提取的元组正常运行测试或代码

import tablib

data = tablib.Dataset()
data.headers = ('first_name', 'last_name')
data2 = tablib.Dataset()
data2.headers = ('first_name', 'last_name')

data.append(('John', 'Adams'))
data.append(('George', 'Washington')) 

for x in range(0, data.height):
    col1, col2 = data.lpop()
    if col2 == 'Adams':
        col2 = "Eves"
    data2.append((col1, col2))
data = data.stack(data2)
这种方法使用tablib,避免了加载第二次导入