Python做字符串处理

来源:互联网 发布:java velocity 编辑:程序博客网 时间:2024/06/14 01:20

今天在修改C++和Matlab的代码的时候,出现了以下问题。C++调用Eigen,创建的矩阵,下标是从0开始,Matlab的则是从1开始。下面为Matlab代码,需要转换成C++,即将所有的下标索引值减1.

 A1<<4 * M(1) - 4 * M(37) + 4 * M(41) + 4 * M(45) - 4 * M(5) - 4 * M(73) + 4 * M(77) + 4 * M(81) - 4 * M(9),
 6 * M(10) - 6 * M(14) - 6 * M(18) + 6 * M(2) + 6 * M(28) - 6 * M(32) - 6 * M(36) - 6 * M(38) + 6 * M(4) - 6 * M(40) - 6 * M(74) - 6 * M(76),
 6 * M(19) - 6 * M(23) - 6 * M(27) + 6 * M(3) - 6 * M(39) - 6 * M(43) + 6 * M(55) - 6 * M(59) - 6 * M(63) + 6 * M(7) - 6 * M(75) - 6 * M(79),
 6 * M(42) - 6 * M(44) - 6 * M(46) + 6 * M(50) + 6 * M(54) - 6 * M(6) + 6 * M(64) - 6 * M(68) - 6 * M(72) + 6 * M(78) + 6 * M(8) - 6 * M(80),
 8 * M(11) - 4 * M(1) + 8 * M(13) + 8 * M(29) + 8 * M(31) + 4 * M(37) - 4 * M(41) + 4 * M(5) + 4 * M(81),
 8 * M(12) + 8 * M(16) + 8 * M(20) + 8 * M(22) + 8 * M(30) + 8 * M(34) - 4 * M(42) - 4 * M(44) + 4 * M(46) - 4 * M(50) - 4 * M(54) + 8 * M(56) + 8 * M(58) + 4 * M(6) + 4 * M(64) - 4 * M(68) - 4 * M(72) - 4 * M(78) + 4 * M(8) - 4 * M(80),
 8 * M(17) - 8 * M(15) + 4 * M(19) - 4 * M(23) - 4 * M(27) + 4 * M(3) - 8 * M(33) + 8 * M(35) - 4 * M(39) + 4 * M(43) - 8 * M(47) - 8 * M(49) - 4 * M(55) + 4 * M(59) + 4 * M(63) + 8 * M(65) + 8 * M(67) - 4 * M(7) - 4 * M(75) + 4 * M(79),
 8 * M(21) - 4 * M(1) + 8 * M(25) + 4 * M(41) + 8 * M(57) + 8 * M(61) + 4 * M(73) - 4 * M(81) + 4 * M(9),
 4 * M(14) - 4 * M(10) + 4 * M(18) - 4 * M(2) - 8 * M(24) + 8 * M(26) + 4 * M(28) - 4 * M(32) - 4 * M(36) + 4 * M(38) + 4 * M(4) - 4 * M(40) - 8 * M(48) - 8 * M(52) - 8 * M(60) + 8 * M(62) + 8 * M(66) + 8 * M(70) + 4 * M(74) - 4 * M(76),
 4 * M(1) - 4 * M(41) - 4 * M(45) + 8 * M(51) - 8 * M(53) - 8 * M(69) + 8 * M(71) - 4 * M(77) - 4 * M(81),
 2 * M(14) - 2 * M(10) - 2 * M(18) - 2 * M(2) - 2 * M(28) + 2 * M(32) - 2 * M(36) + 2 * M(38) - 2 * M(4) + 2 * M(40) - 2 * M(74) - 2 * M(76),
 4 * M(15) + 4 * M(17) - 2 * M(19) + 2 * M(23) - 2 * M(27) - 2 * M(3) + 4 * M(33) + 4 * M(35) + 2 * M(39) + 2 * M(43) + 4 * M(47) + 4 * M(49) - 2 * M(55) + 2 * M(59) - 2 * M(63) + 4 * M(65) + 4 * M(67) - 2 * M(7) - 2 * M(75) - 2 * M(79),
 4 * M(12) - 4 * M(16) + 4 * M(20) + 4 * M(22) + 4 * M(30) - 4 * M(34) - 2 * M(42) + 2 * M(44) + 2 * M(46) - 2 * M(50) + 2 * M(54) - 4 * M(56) - 4 * M(58) + 2 * M(6) - 2 * M(64) + 2 * M(68) - 2 * M(72) + 2 * M(78) - 2 * M(8) - 2 * M(80),
 2 * M(18) - 2 * M(14) - 2 * M(10) - 2 * M(2) + 4 * M(24) + 4 * M(26) - 2 * M(28) - 2 * M(32) + 2 * M(36) - 2 * M(38) - 2 * M(4) - 2 * M(40) + 4 * M(48) + 4 * M(52) + 4 * M(60) + 4 * M(62) + 4 * M(66) + 4 * M(70) + 2 * M(74) + 2 * M(76),
 8 * M(21) - 8 * M(11) + 8 * M(31) - 8 * M(51) - 8 * M(61) + 8 * M(71),
 2 * M(10) + 2 * M(14) + 2 * M(18) + 2 * M(2) - 4 * M(24) + 4 * M(26) + 2 * M(28) + 2 * M(32) + 2 * M(36) + 2 * M(38) + 2 * M(4) + 2 * M(40) - 4 * M(48) + 4 * M(52) + 4 * M(60) - 4 * M(62) + 4 * M(66) - 4 * M(70) + 2 * M(74) + 2 * M(76),
 2 * M(27) - 2 * M(23) - 2 * M(19) - 2 * M(3) - 2 * M(39) - 2 * M(43) - 2 * M(55) - 2 * M(59) + 2 * M(63) - 2 * M(7) + 2 * M(75) + 2 * M(79),
 4 * M(22) - 4 * M(16) - 4 * M(20) - 4 * M(12) + 4 * M(30) + 4 * M(34) + 2 * M(42) - 2 * M(44) + 2 * M(46) + 2 * M(50) - 2 * M(54) - 4 * M(56) + 4 * M(58) + 2 * M(6) - 2 * M(64) - 2 * M(68) + 2 * M(72) - 2 * M(78) - 2 * M(8) + 2 * M(80),
 4 * M(15) - 4 * M(17) + 2 * M(19) + 2 * M(23) + 2 * M(27) + 2 * M(3) - 4 * M(33) + 4 * M(35) + 2 * M(39) + 2 * M(43) + 4 * M(47) - 4 * M(49) + 2 * M(55) + 2 * M(59) + 2 * M(63) - 4 * M(65) + 4 * M(67) + 2 * M(7) + 2 * M(75) + 2 * M(79),
 2 * M(44) - 2 * M(42) - 2 * M(46) - 2 * M(50) - 2 * M(54) - 2 * M(6) + 2 * M(64) + 2 * M(68) + 2 * M(72) - 2 * M(78) + 2 * M(8) + 2 * M(80);

     在此,我们需要利用Python处理:预期效果,将所有的M(n)的下标减1.

#coding=utf-8
f = open("data1.txt")
lines = f.readlines()
with open ("data_new.txt",'wt') as ff:
    for line in lines:
        count = False
        countend = False
        curr = []
        sy = ""
        two = False
        twoc = False
        #print (line)
        # #目标在括号内部,并且是个数字
        for tim in range(len(line)):
            sy = line[tim]
            if line[tim] == '(':
                count  = True
                countend = False
            elif line[tim] == ')':
                countend = True
                count = False
                curr = []
            if (count==True and countend !=True and line[tim] !='(' and line[tim] !=')'):
                if (line[tim+1] >= '0' and line[tim+1] <= '9' and  two==False): #后边还有,并且这里是第一个
                    curr.append(line[tim])
                    curr.append(line[tim+1])
                    two = True
                else:
                    if two:  #这里的问题,问题就是某次的二位数的第1位重复打印
                        twoc = True
                        two = False
                        pass
                    else:
                        curr.append(line[tim])
            if(curr):
                print(curr)  #只有curr不为Null的时候
                # num = 0
                if (len(curr)==2):
                    num = 10*int(curr[0]) + int(curr[1])
                elif (len(curr) ==1):
                    num = int(curr[0])
                num = num -1
                print(num)
                sy = str(num)
            if twoc:
                twoc =False
                pass
            else:
                ff.write(sy)
结果如下:
 A1<<4 * M(0) - 4 * M(36) + 4 * M(40) + 4 * M(44) - 4 * M(4) - 4 * M(72) + 4 * M(76) + 4 * M(80) - 4 * M(8),
 6 * M(9) - 6 * M(13) - 6 * M(17) + 6 * M(1) + 6 * M(27) - 6 * M(31) - 6 * M(35) - 6 * M(37) + 6 * M(3) - 6 * M(39) - 6 * M(73) - 6 * M(75),
 6 * M(18) - 6 * M(22) - 6 * M(26) + 6 * M(2) - 6 * M(38) - 6 * M(42) + 6 * M(54) - 6 * M(58) - 6 * M(62) + 6 * M(6) - 6 * M(74) - 6 * M(78),
 6 * M(41) - 6 * M(43) - 6 * M(45) + 6 * M(49) + 6 * M(53) - 6 * M(5) + 6 * M(63) - 6 * M(67) - 6 * M(71) + 6 * M(77) + 6 * M(7) - 6 * M(79),
 8 * M(10) - 4 * M(0) + 8 * M(12) + 8 * M(28) + 8 * M(30) + 4 * M(36) - 4 * M(40) + 4 * M(4) + 4 * M(80),
 8 * M(11) + 8 * M(15) + 8 * M(19) + 8 * M(21) + 8 * M(29) + 8 * M(33) - 4 * M(41) - 4 * M(43) + 4 * M(45) - 4 * M(49) - 4 * M(53) + 8 * M(55) + 8 * M(57) + 4 * M(5) + 4 * M(63) - 4 * M(67) - 4 * M(71) - 4 * M(77) + 4 * M(7) - 4 * M(79),
 8 * M(16) - 8 * M(14) + 4 * M(18) - 4 * M(22) - 4 * M(26) + 4 * M(2) - 8 * M(32) + 8 * M(34) - 4 * M(38) + 4 * M(42) - 8 * M(46) - 8 * M(48) - 4 * M(54) + 4 * M(58) + 4 * M(62) + 8 * M(64) + 8 * M(66) - 4 * M(6) - 4 * M(74) + 4 * M(78),
 8 * M(20) - 4 * M(0) + 8 * M(24) + 4 * M(40) + 8 * M(56) + 8 * M(60) + 4 * M(72) - 4 * M(80) + 4 * M(8),
 4 * M(13) - 4 * M(9) + 4 * M(17) - 4 * M(1) - 8 * M(23) + 8 * M(25) + 4 * M(27) - 4 * M(31) - 4 * M(35) + 4 * M(37) + 4 * M(3) - 4 * M(39) - 8 * M(47) - 8 * M(51) - 8 * M(59) + 8 * M(61) + 8 * M(65) + 8 * M(69) + 4 * M(73) - 4 * M(75),
 4 * M(0) - 4 * M(40) - 4 * M(44) + 8 * M(50) - 8 * M(52) - 8 * M(68) + 8 * M(70) - 4 * M(76) - 4 * M(80),
 2 * M(13) - 2 * M(9) - 2 * M(17) - 2 * M(1) - 2 * M(27) + 2 * M(31) - 2 * M(35) + 2 * M(37) - 2 * M(3) + 2 * M(39) - 2 * M(73) - 2 * M(75),
 4 * M(14) + 4 * M(16) - 2 * M(18) + 2 * M(22) - 2 * M(26) - 2 * M(2) + 4 * M(32) + 4 * M(34) + 2 * M(38) + 2 * M(42) + 4 * M(46) + 4 * M(48) - 2 * M(54) + 2 * M(58) - 2 * M(62) + 4 * M(64) + 4 * M(66) - 2 * M(6) - 2 * M(74) - 2 * M(78),
 4 * M(11) - 4 * M(15) + 4 * M(19) + 4 * M(21) + 4 * M(29) - 4 * M(33) - 2 * M(41) + 2 * M(43) + 2 * M(45) - 2 * M(49) + 2 * M(53) - 4 * M(55) - 4 * M(57) + 2 * M(5) - 2 * M(63) + 2 * M(67) - 2 * M(71) + 2 * M(77) - 2 * M(7) - 2 * M(79),
 2 * M(17) - 2 * M(13) - 2 * M(9) - 2 * M(1) + 4 * M(23) + 4 * M(25) - 2 * M(27) - 2 * M(31) + 2 * M(35) - 2 * M(37) - 2 * M(3) - 2 * M(39) + 4 * M(47) + 4 * M(51) + 4 * M(59) + 4 * M(61) + 4 * M(65) + 4 * M(69) + 2 * M(73) + 2 * M(75),
 8 * M(20) - 8 * M(10) + 8 * M(30) - 8 * M(50) - 8 * M(60) + 8 * M(70),
 2 * M(9) + 2 * M(13) + 2 * M(17) + 2 * M(1) - 4 * M(23) + 4 * M(25) + 2 * M(27) + 2 * M(31) + 2 * M(35) + 2 * M(37) + 2 * M(3) + 2 * M(39) - 4 * M(47) + 4 * M(51) + 4 * M(59) - 4 * M(61) + 4 * M(65) - 4 * M(69) + 2 * M(73) + 2 * M(75),
 2 * M(26) - 2 * M(22) - 2 * M(18) - 2 * M(2) - 2 * M(38) - 2 * M(42) - 2 * M(54) - 2 * M(58) + 2 * M(62) - 2 * M(6) + 2 * M(74) + 2 * M(78),
 4 * M(21) - 4 * M(15) - 4 * M(19) - 4 * M(11) + 4 * M(29) + 4 * M(33) + 2 * M(41) - 2 * M(43) + 2 * M(45) + 2 * M(49) - 2 * M(53) - 4 * M(55) + 4 * M(57) + 2 * M(5) - 2 * M(63) - 2 * M(67) + 2 * M(71) - 2 * M(77) - 2 * M(7) + 2 * M(79),
 4 * M(14) - 4 * M(16) + 2 * M(18) + 2 * M(22) + 2 * M(26) + 2 * M(2) - 4 * M(32) + 4 * M(34) + 2 * M(38) + 2 * M(42) + 4 * M(46) - 4 * M(48) + 2 * M(54) + 2 * M(58) + 2 * M(62) - 4 * M(64) + 4 * M(66) + 2 * M(6) + 2 * M(74) + 2 * M(78),
 2 * M(43) - 2 * M(41) - 2 * M(45) - 2 * M(49) - 2 * M(53) - 2 * M(5) + 2 * M(63) + 2 * M(67) + 2 * M(71) - 2 * M(77) + 2 * M(7) + 2 * M(79);