将数字添加并递增到数字或非数字字符串python

时间:2016-03-21 14:12:05

标签: python json string

我正在读取包含数据的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"
}]

任何建议都将受到赞赏。

2 个答案:

答案 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原则。如果您使用enumeratestr.format,则可以清除您的代码。

for index, dictionary in enumerate(test):
    try:
        dictionary['value'] = int(dictionary['value']) + 1

    except ValueError:
        dictionary['value'] += '_{}'.format(index)