Python 没有写新行的奇怪换行符

Python strange newline where no new line is written

我正在尝试在 Python 中打印出一个中等大小的列表,我正在做的是在一行中打印出整个列表以测试程序以确保输入了正确的数据以正确的顺序进入列表。我读入了 2 个文件并将所有数据放入 2 个词典中。然后,我将字典分成几部分,并将所有相似的数据放入一个列表中。我是 Python 的超级新手,这是我在字典上找到的教程,我有点卡住了。此行将列表打印在一行中:

print '[%s]' % ', '.join(map(str, player_list))

但是这一行将列表的每个值打印在我不想要的单独一行上:

print '[%s]' % ', '.join(map(str, army_list))

如果需要,这是我添加到列表中的代码:

import collections
import operator
terridict = {}
gsdict = {}
terr_list = []
player_list = []
army_list = []
list_length = []
total_territories = 0
with open('territories.txt', 'r') as territory:
    for line in territory:
        terridict["territory"], terridict["numeric_id"], terridict["continent"] = line.split(',')

with open('gameState.txt', 'r') as gameState:
    for line in gameState:
        gsdict["numeric_id"], gsdict["player"], gsdict["num_armies"] = line.split(',')
        terr_num = gsdict["numeric_id"]
        player_num = gsdict["player"]
        army_size = gsdict["num_armies"]
        if terr_num >= 1 and player_num >= 1 and army_size >= 1:
            terr_list.append(terr_num)
            player_list.append(player_num)
            army_list.append(army_size)
            player_list.sort()
            counter = collections.Counter(player_list)
            print (counter)
            total_territories = total_territories + 1
        x = counter
        sorted_x = sorted(x.items(), key=operator.itemgetter(0))
        counter = sorted_x
        print terr_num, player_num, army_size

print counter
print "Number of territories: %d" % total_territories
print '[%s]' % ', '.join(map(str, terr_list))
print '[%s]' % ', '.join(map(str, player_list))
print '[%s]' % ', '.join(map(str, army_list))

line,读入时,以换行符结尾。例如(我在这里猜测):

"1 nelson2013 23\n"

当您通过 space split 时,您会得到:

["1", "nelson2013", "23\n"]

请注意,玩家名称不以换行符结尾,但军队规模以换行符结尾。当您将军队规模合并在一起时,他们最终会变成这样:

"23\n, 18\n, 121\n"

即由换行符分隔,这使得它们每行打印一个。

为了解决这个问题,您想在循环的顶部立即在 line 上调用 rstrip(),然后再进一步处理它。

您可能想修复现在的行,因为 line.rsplit() 本身不能很好地工作。根据 Amadan 所说:

line = line.rsplit()

这样就去掉了换行符,可以把line设置为不涉及换行符的条件。我试过了,这很有效。