Python:如何用有序数替换对象的每个实例?

时间:2015-10-22 04:32:34

标签: python loops

标题可能有点神秘,所以我在这里详细说明。

我有一个像这样定义的对象列表:

pname {
'amondo': 'amondo',
'android13': 'android13',
'android13s': 'android13s',
'android14': 'android14',
总共有351个对象。

我尝试做的是将左侧引号中的文字替换为从1开始的数字。所以最终结果如下:

'1': 'amondo',
'2': 'android13',
'3': 'android13s',
'4': 'android14',

一直到最后一个对象。

我使用以下代码创建了一个python脚本:

import re

f = open('name.js', 'r')

inp = []
outp = []


for i in f:
    inp.append(i)

for i in inp:
    x = 1
    while x < 352:
        r = re.sub('.*\:', "'" + str(x) + "':", i)
        x+=1

    outp.append(r)


o = open('done.js', 'w')

for i in outp:
    o.write(i)

f.close()
o.close()

但输出是:

'351': 'amondo',
'351': 'android13',
'351': 'android13s',
'351': 'android14',

我理解我做错了什么以及为什么输出是这样的但是我不确定如何修复它。

可能有一个功能可以帮助我,我不知道。

2 个答案:

答案 0 :(得分:3)

如果仔细观察你的while循环,没有什么能阻止它直到x = 352然后你追加r,这不是你想要的...一个简单的计算行的方法是使用枚举:

for x,i in enumerate(f):
    r = re.sub('.*\:', "'" + str(x) + "':", i)
    outp.append(r)

答案 1 :(得分:2)

试试这个:

with open('name.js') as infile, open('done.js', 'w') as outfile:
    count = 0
    for line in infile:
        if ":" not in line:
            outfile.write(line)
            continue
        count += 1
        _, val = line.strip().split(":")
        outfile.write("'{}' : {}\n".format(count, val))