【问题标题】:Python strange newline where no new line is writtenPython奇怪的换行符,没有写新行
【发布时间】:2015-01-22 02:02:07
【问题描述】:

我正在尝试在 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))

【问题讨论】:

  • 必须只在一行上吗?如果您真的只是想找出它们是否按正确的顺序,只需遍历列表即可。它将为您提供第一个值到最后一个值。 for i in player_list: print i

标签: python list dictionary printing


【解决方案1】:

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

"1 nelson2013 23\n"

当你用空格split它时,你会得到这个:

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

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

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

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

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

【讨论】:

  • 完美!有效!我发现如果我设置 line = line.rstrip(),它会起作用。谢谢一百万!
【解决方案2】:

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

line = line.rsplit()

这样,换行符被删除,并且可以将 line 设置为不涉及换行符的条件。我试了一下,效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 2018-09-08
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多