簡體   English   中英

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”次。

試試這個代碼。 請注意,此代碼刪除了文本前的前導空格。

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)

輸出是一樣的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM