首页 > 解决方案 > 在 Python3 中使用 line.replace 对数字序列重新编号

问题描述

我有来自另一部分代码的输出文件:

1434 CPM 3.958 20.716 72.669 94 1438 1465
1435 CPM 1.836 16.422 71.695 94 1441 1448
1436 CPM 2.634 17.182 67.015 94 1451 1455
1437 CPM 4.132 21.733 67.897 94 1458 1462
1438 CPB 3.349 19.474 72.781 93 1434 1439 1472
1439 CPA 3.118 18.784 74.036 92 1438 1440 1443
1440 CPA 2.552 17.612 73.778 92 1439 1441 1442
1441 CPB 2.378 17.502 72.348 93 1435 1440 1472
1442 CT3 2.158 16.567 74.855 27 1440
1443 CT2 3.485 19.307 75.452 26 1439 1444
1444 CT2 2.553 20.439 75.889 26 1443 1445
1445 CM 2.317 20.343 77.375 96 1444 1446 1447
1446 OH1 2.873 19.416 78.015 76 1445
1447 OM 1.582 21.197 77.930 105 1445
1448 CPB 1.923 16.208 70.337 93 1435 1449 1473
1449 CPA 1.600 14.991 69.612 92 1448 1450 1452
1450 CPA 1.816 15.216 68.315 92 1449 1451 1453
1451 CPB 2.285 16.572 68.185 93 1436 1450 1473
1452 CT3 1.091 13.691 70.273 27 1449
1453 C 1.653 14.262 67.103 95 1450 1454
1454 C 0.582 13.482 66.929 95 1453
1455 CPB 3.119 18.452 66.894 93 1436 1456 1474
1456 CPA 3.538 19.007 65.645 92 1455 1457 1459
1457 CPA 3.944 20.244 65.858 92 1456 1458 1460
1458 CPB 3.803 20.546 67.268 93 1437 1457 1474
1459 CT3 3.556 18.278 64.284 27 1456
1460 C 4.486 21.151 64.731 95 1457 1461
1461 C 4.266 22.469 64.758 95 1460
1462 CPB 4.362 21.866 69.256 93 1437 1463 1475
1463 CPA 5.109 22.925 69.918 92 1462 1464 1466
1464 CPA 5.050 22.612 71.413 92 1463 1465 1467
1465 CPB 4.294 21.373 71.505 93 1434 1464 1475
1466 CT3 5.789 24.129 69.239 27 1463
1467 CT2 5.685 23.426 72.579 26 1464 1468
1468 CT2 4.623 23.904 73.582 26 1467 1469
1469 CM 4.434 25.412 73.527 96 1468 1470 1471
1470 OH1 4.822 26.053 72.525 76 1469
1471 OM 3.847 25.982 74.474 105 1469
1472 NPH 2.870 18.669 71.752 100 1438 1441 1476
1473 NPH 2.335 17.156 69.426 100 1448 1451 1476
1474 NPH 3.284 19.422 67.889 100 1455 1458 1476
1475 NPH 3.914 20.981 70.226 100 1462 1465 1476
1476 FE 2.826 19.201 69.829 107 822 1472 1473 1474

我需要做的是从 1434 重新编号到另一个数字(例如,在这种情况下为 3168)并替换该数字的每个实例。然后转到下一个数字(1435)并将它和它的每个实例更改为下一个数字序列(3169)。到目前为止我写的是:

def renumber_xyz():
    file_name = "output1.txt"
    f1 = open(file_name, "rt")
    f2 = open("output2.txt", "wt")
    lines = f1.readlines()
    
    i = 1434
    j = 3168
    for line in lines:
        f2.write(line.replace(str(i), str(j)))
        
        i = int(i) + 1
        j = int(j) + 1
        
    f1.close()
    f2.close()  

renumber_xyz()

但是,这只会更改每个数字的一​​个实例:

3168 CPM 3.958 20.716 72.669 94 1438 1465
3169 CPM 1.836 16.422 71.695 94 1441 1448
3170 CPM 2.634 17.182 67.015 94 1451 1455
3171 CPM 4.132 21.733 67.897 94 1458 1462
3172 CPB 3.349 19.474 72.781 93 1434 1439 1472
3173 CPA 3.118 18.784 74.036 92 1438 1440 1443
3174 CPA 2.552 17.612 73.778 92 1439 1441 1442
3175 CPB 2.378 17.502 72.348 93 1435 1440 1472
3176 CT3 2.158 16.567 74.855 27 1440
3177 CT2 3.485 19.307 75.452 26 1439 1444
3178 CT2 2.553 20.439 75.889 26 1443 1445
3179 CM 2.317 20.343 77.375 96 1444 1446 1447
3180 OH1 2.873 19.416 78.015 76 1445
3181 OM 1.582 21.197 77.930 105 1445
3182 CPB 1.923 16.208 70.337 93 1435 1449 1473
3183 CPA 1.600 14.991 69.612 92 1448 1450 1452
3184 CPA 1.816 15.216 68.315 92 1449 1451 1453
3185 CPB 2.285 16.572 68.185 93 1436 1450 1473
3186 CT3 1.091 13.691 70.273 27 1449
3187 C 1.653 14.262 67.103 95 1450 1454
3188 C 0.582 13.482 66.929 95 1453
3189 CPB 3.119 18.452 66.894 93 1436 1456 1474
3190 CPA 3.538 19.007 65.645 92 1455 1457 1459
3191 CPA 3.944 20.244 65.858 92 1456 1458 1460
3192 CPB 3.803 20.546 67.268 93 1437 1457 1474
3193 CT3 3.556 18.278 64.284 27 1456
3194 C 4.486 21.151 64.731 95 1457 1461
3195 C 4.266 22.469 64.758 95 1460
3196 CPB 4.362 21.866 69.256 93 1437 1463 1475
3197 CPA 5.109 22.925 69.918 92 1462 1464 1466
3198 CPA 5.050 22.612 71.413 92 1463 1465 1467
3199 CPB 4.294 21.373 71.505 93 1434 1464 1475
3200 CT3 5.789 24.129 69.239 27 1463
3201 CT2 5.685 23.426 72.579 26 1464 1468
3202 CT2 4.623 23.904 73.582 26 1467 1469
3203 CM 4.434 25.412 73.527 96 1468 1470 1471
3204 OH1 4.822 26.053 72.525 76 1469
3205 OM 3.847 25.982 74.474 105 1469
3206 NPH 2.870 18.669 71.752 100 1438 1441 1476
3207 NPH 2.335 17.156 69.426 100 1448 1451 1476
3208 NPH 3.284 19.422 67.889 100 1455 1458 1476
3209 NPH 3.914 20.981 70.226 100 1462 1465 1476
3210 FE 2.826 19.201 69.829 107 822 1472 1473 1474

请原谅我的业余代码,我不是程序员!谢谢你的帮助!!

标签: pythonpython-3.x

解决方案


您的代码的问题在于,对于每一行,它只尝试用另一个数字替换一个数字,然后移动到下一行。但是,您的每一行都包含多个需要替换的唯一数字,因此不要逐行进行,而是尝试使用整个文本正文:

def renumber_xyz():
    file_name = "output1.txt"
    f1 = open(file_name, "rt")
    f2 = open("output2.txt", "wt")
    text = f1.read()

    # Iterate through each number i that needs replacing
    for i in range(1434, 1477):
      # Replace all occurrences in the entire file
      text = text.replace(str(i), str(i+1734))

    f2.write(text)
    
    f1.close()
    f2.close()

renumber_xyz()

您的代码的这个修改版本应该可以完成这项工作。请记住,如果原始号码的范围和替换号码的范围重叠,这将不起作用。


推荐阅读