如何在python 3x中将文本文件中的行附加到多个列表中



我的问题是我有一个包含以下内容的文本文件:

♦J
♣J
♠J
♣8
♦A
♥9
♥J
♥J
♦A
♦K
♦7
♦J
♦7
♦A
♦K
♥7
♣10
♣J
♠A
♦A
♣J
♦7
♠10
♥K
♣9
♥10
♦A
♠8
♠J
♥9
♦8
♠A

我正试图将其按从下到下的顺序添加到8个不同的列表中。我有8个不同的列表和一个包含所有不同列表的列表,它们设置如下:

deckOne = []
deckTwo = []
DeckThree = []
DeckFour = []
deckFive = []
deckSix = []
deckSeven = []
deckEight = []
deckList = [deckOne, deckTwo, DeckThree, DeckFour, deckFive, deckSix, deckSeven, deckEight]

当我运行程序时,我没有得到任何错误,但是,我没有获得预期的输出。预期的输出是这样的:

[♦J, ♣J, ♠J, ♣8]
[♦A, ♥9, ♥J, ♥J]
[♦A, ♦K, ♦7, ♦J]
[♦7, ♦A, ♦K, ♥7]
[♣10, ♣J, ♠A, ♦A]
[♣J, ♦7, ♠10, ♥K]
[♣9, ♥10, ♦A, ♠8]
[♠J, ♥9, ♦8, ♠A]

但我目前得到的结果是:

[['♦J', '♦A', '♣10', '♣9'], ['♣J', '♦K', '♣J', '♥10'], ['♠J', '♦7', '♠A', '♦A'], ['♣8', '♦J', '♦A', '♠8'], ['♦A', '♦7', '♣J', '♠J'], ['♥9', '♦A', '♦7', '♥9'], ['♥J', '♦K', '♠10', '♦8'], ['♥J', '♥7', '♥K', '♠A']]

这个输出是错误的,因为它将文件中的每4行而不是4行附加到一个列表,然后将下一个4行添加到下一个列表等等

def hentLagretSpill():
import codecs
with codecs.open("game_save.txt", 'rb', encoding="utf-8") as gameGetter:
count = 0
for i, l in enumerate(gameGetter):
count += 1
deckList[i % 8].append(l.strip())
print(deckList)

但我也尝试过,它很有效,但它很长:

x = -1
for line in gameGetter:
x += 1
if x // 4 == 0:
deckOne.append(line.strip('n'))
if x // 4 == 1:
deckTwo.append(line.strip('n'))
if x // 4 == 2:
DeckThree.append(line.strip('n'))
if x // 4 == 3:
DeckFour.append(line.strip('n'))
if x // 4 == 4:
deckFive.append(line.strip('n'))
if x // 4 == 5:
deckSix.append(line.strip('n'))
if x // 4 == 6:
deckSeven.append(line.strip('n'))
if x // 4 == 7:
deckEight.append(line.strip('n'))

我该如何解决这个问题?

您看到的问题是%(模(运算符返回余数,而不是第二个例子中的整数除法。您可以通过返回整数除法并将其用作列表中的索引来修复它。

def hentLagretSpill():
with open("game_save.txt", 'r', encoding="utf-8") as gameGetter:
for i, l in enumerate(gameGetter):
ix = i // 4
deckList[ix].append(l.strip())
print(deckList)
# prints:
[['♦J', '♣J', '♠J', '♣8'],
['♦A', '♥9', '♥J', '♥J'],
['♦A', '♦K', '♦7', '♦J'],
['♦7', '♦A', '♦K', '♥7'],
['♣10', '♣J', '♠A', '♦A'],
['♣J', '♦7', '♠10', '♥K'],
['♣9', '♥10', '♦A', '♠8'],
['♠J', '♥9', '♦8', '♠A']]

最新更新