[英]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.