我正在读取包含数据的JSON文件,并且我正在尝试确保在我的代码中创建的每个文件都具有唯一值。然而,有时值是一个字符串,如"数据"或一些数字作为字符串
因此,如果我创建3次的文件被称为"数据",我想将其转换为:
data_0
data_1
data_2
此外,如果值是一个数字(但它是字符串格式),例如145,我想将其更改为:
145
146
147
目前我的代码产生如下内容:
data_0,
data_0_1,
data_0_1_2
或
145_0,
145_0_1,
145_0_1_2
以下是我的代码:
for index in range(0,len(test)):
test[index]["value"]= test[index]["value"] + str(number)
我正在使用str(number)
,否则我收到此错误:
TypeError:强制转换为Unicode:需要字符串或缓冲区,找到int
JSON文件示例:
"test": [{
"type": "text",
"value": "data"
}, {
"type": "integer",
"value": "145"
}]
任何建议都将受到赞赏。
答案 0 :(得分:1)
您可以使用try & catch
检查输入是整数还是字符串。如果是int
,则您将该数字加1,如果是string
,则只需附加_index
。
test = [{"type": "text", "value": "data"}, {"type": "integer","value": "145"}]
for index in range(0,len(test)):
try:
# Test if the value is an integer
test[index]["value"]= int(test[index]["value"]) + index
except ValueError:
# The value is an string
test[index]["value"]= test[index]["value"] + "_" + str(index)
print test
输出:
[{'type': 'text', 'value': 'data_0'}, {'type': 'integer', 'value': 146}]
答案 1 :(得分:0)
Borja的答案很好,遵循EAFP原则。如果您使用enumerate
和str.format
,则可以清除您的代码。
for index, dictionary in enumerate(test):
try:
dictionary['value'] = int(dictionary['value']) + 1
except ValueError:
dictionary['value'] += '_{}'.format(index)