python 字符串拆分导致列表包含错误的索引

python string split resulting in list with wrong indexes

file = open(fullname, 'r')
        for line in file:
                if line.endswith('\n'): line = line[:-1]
                line = line.split(',')
                for tile in line:
                        index = line.index(tile)
                        tile = tile.split('>')
                        print(tile)
                        copies = int(tile[1])
                        tile = tile * copies
                        line[index:index+1] = tile

文本文件格式: block>20, otherblock>10

输出:

['block', '20']
['20']
Traceback (most recent call last):
  File "C:/Users/CAIO/Documents/Pycharm/vitoria/main.py", line 92, in <module>
    main()
  File "C:/Users/CAIO/Documents/Pycharm/vitoria/main.py", line 77, in main
    test_map = MapClass("map.txt")
  File "C:/Users/CAIO/Documents/Pycharm/vitoria/main.py", line 23, in __init__
    self.load_map(name)
  File "C:/Users/CAIO/Documents/Pycharm/vitoria/main.py", line 39, in load_map
    copies = int(tile[1])
IndexError: list index out of range

Process finished with exit code 1

当我引用 tile[1] 时,它表示索引无效,而当我引用 tile[0] 时,它只是 'block',而不是 ['block','10']。 拆分前打印图块导致:

'block>20'
'20'

我现在太累了,我可能跳过了一些愚蠢的东西

根据您的代码,您似乎想要扩展 'text>count' 格式,使文本重复 'count' 次。

试试这个代码。请注意,此代码删除了文本前的前导 space。

ss = '''
block>20, otherblock>10
b2>21, ob2>12
b3>22, ob3>13
'''.strip()

with open('test.csv','w') as f: f.write(ss)  # write test file


##############
  
fullname = 'test.csv'

alllines = []

file = open(fullname, 'r')
for line in file:
    lineout = line
    if line.endswith('\n'): line = line[:-1]
    line = line.split(',')
    for idx,tile in enumerate(line):
        #index = line.index(tile)        
        tilex = tile.strip().split('>')
        copies = int(tilex[1])
        tilex2 = tilex[0] * copies
        lineout = lineout.replace(tile, tilex2)
    alllines.append(lineout)
print(''.join(alllines))

输出

blockblockblockblockblockblockblockblockblockblockblockblockblockblockblockblockblockblockblockblock,otherblockotherblockotherblockotherblockotherblockotherblockotherblockotherblockotherblockotherblock
b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2,ob2ob2ob2ob2ob2ob2ob2ob2ob2ob2ob2ob2
b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3,ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3ob3

如果您想要最少的代码,可以使用列表理解。

ss = '''
block>20, otherblock>10
b2>21, ob2>12
b3>22, ob3>13
'''.strip()

with open('test.csv','w') as f: f.write(ss)   # write test file

#######################

with open(fullname, 'r') as f:
    lines = f.readlines()
    xx = '\n'.join([','.join([e.split('>')[0]*int(e.split('>')[1]) for e in ln.split(', ')]) for ln in lines])
    print(xx)

输出相同