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

2024-09-20 22:53:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

'block>20'
'20'

我现在太累了,不想做这个,可能是我跳过了一些愚蠢的事情


Tags: inpymapindexmainlineblockusers
1条回答
网友
1楼 · 发布于 2024-09-20 22:53:13

根据您的代码,您似乎希望展开“文本”>;“计数”格式,文本重复“计数”次

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

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)

输出相同

相关问题 更多 >

    热门问题