有没有一种方法可以在文本文件中相互切换几行?
Is there a method for switching several lines with each other in a text file?
我需要一个 METHOD/technique 来根据玩家的分数对文本文件进行排序。因此,如果玩家 2 的得分高于玩家 1,则玩家 2 需要向上移动到玩家 1 在文本文件中的位置,反之亦然。这可能吗?
因此,当文档在每一行列出不同的类别时,我找到了一些方法,以便它显示为:
玩家 1、3、2、1
玩家 2, 1, 2, 3
但我的问题是每个玩家都有 4 行代码需要切换。我的文本文件如下所示:
玩家 1
3(*这是重要的)
2
1
玩家2
1 *
2
3
- 所以假设玩家 2 比玩家 1 玩得更多并且得分更高文本文档应该看起来像
玩家2
4 (*)
3
2
玩家 1
3(*这是重要的行)
2
1
所以澄清一下;我需要对文本文件中得分最高的玩家首先写入的文档进行排序。这样我就可以打印有问题的结果排行榜
请注意:我要的不是代码,而是可用于解决此类问题的 method/general 示例(或在哪里可以找到)。 Bc 我真的很茫然,看了我的书和这里。因此,如果您对此有答案或知道有相同问题的已回答线程,请发表评论,这将对我有很大帮助!
我知道我没有任何代码可以提供,但那是因为有 none。我真的只需要一些帮助从哪里开始/指导我找到方法或示例
提前致谢:D
首先,您不能轻易直接修改这种文件。方法是:读取数据,修改数据,写回数据。
我假设您可以将数据读入数据结构。例如,在您的情况下,数据可以自然地存储为 4 元组列表。每个 4 元组看起来像这样:
("player1", 3, 2, 1)
(你应该确保你存储的是分数的数字,而不是字符串,因为它们需要稍后进行比较。)
假设您已将它们存储在名为 player_list
的列表中
接下来您需要对列表进行排序。您需要的排序键是每个元组中的第二个条目,在 Python 术语中具有索引 1(因为编号从 0 开始)
def sort_key ( tup ): return tup[1]
然后您可以使用此排序键传递给排序函数(请参阅此 https://docs.python.org/3/library/stdtypes.html#list.sort)这会就地对您的列表进行排序:
player_list . sort ( key = sort_key, reverse = True )
(我们需要 "reverse" 来确保顺序是递减的,而不是递增的。)
最后,您需要以新顺序再次写出 player_list 来覆盖文件:
for (player, s1, s2, s3) in player_list:
write_entry_to_file ( player, s1, s2, s3 ) # use whatever format you need here.
元组注意事项:
元组很像列表,不同之处在于一旦创建了元组就无法更改 ("immutable")。要创建元组,您可以使用圆括号 () 而不是方括号 []。
mylist = [2, 4, 6, 8]
mytuple = (2, 4, 6, 8)
你可以用同样的方式索引它们
mylist[0] # returns 2
mytuple[0] # returns 2 too
mylist[1:3] # returns the list [4, 6]
mytuple[1:3] # returns the tuple (4, 6)
并以同样的方式附加它们
[2,4] + [6,8] # returns [2,4,6,8]
(2,4) + (6,8) # returns (2,4,6,8)
空元组为(),单元素x的元组为(x,)
两者之间的转换很容易:
list(mytuple) # returns [2,4,6,8]
tuple(mylist) # returns (2,4,6,8)
我需要一个 METHOD/technique 来根据玩家的分数对文本文件进行排序。因此,如果玩家 2 的得分高于玩家 1,则玩家 2 需要向上移动到玩家 1 在文本文件中的位置,反之亦然。这可能吗?
因此,当文档在每一行列出不同的类别时,我找到了一些方法,以便它显示为:
玩家 1、3、2、1
玩家 2, 1, 2, 3
但我的问题是每个玩家都有 4 行代码需要切换。我的文本文件如下所示:
玩家 1
3(*这是重要的)
2
1
玩家2
1 *
2
3
- 所以假设玩家 2 比玩家 1 玩得更多并且得分更高文本文档应该看起来像
玩家2
4 (*)
3
2
玩家 1
3(*这是重要的行)
2
1
所以澄清一下;我需要对文本文件中得分最高的玩家首先写入的文档进行排序。这样我就可以打印有问题的结果排行榜
请注意:我要的不是代码,而是可用于解决此类问题的 method/general 示例(或在哪里可以找到)。 Bc 我真的很茫然,看了我的书和这里。因此,如果您对此有答案或知道有相同问题的已回答线程,请发表评论,这将对我有很大帮助!
我知道我没有任何代码可以提供,但那是因为有 none。我真的只需要一些帮助从哪里开始/指导我找到方法或示例
提前致谢:D
首先,您不能轻易直接修改这种文件。方法是:读取数据,修改数据,写回数据。
我假设您可以将数据读入数据结构。例如,在您的情况下,数据可以自然地存储为 4 元组列表。每个 4 元组看起来像这样:
("player1", 3, 2, 1)
(你应该确保你存储的是分数的数字,而不是字符串,因为它们需要稍后进行比较。)
假设您已将它们存储在名为 player_list
的列表中接下来您需要对列表进行排序。您需要的排序键是每个元组中的第二个条目,在 Python 术语中具有索引 1(因为编号从 0 开始)
def sort_key ( tup ): return tup[1]
然后您可以使用此排序键传递给排序函数(请参阅此 https://docs.python.org/3/library/stdtypes.html#list.sort)这会就地对您的列表进行排序:
player_list . sort ( key = sort_key, reverse = True )
(我们需要 "reverse" 来确保顺序是递减的,而不是递增的。)
最后,您需要以新顺序再次写出 player_list 来覆盖文件:
for (player, s1, s2, s3) in player_list:
write_entry_to_file ( player, s1, s2, s3 ) # use whatever format you need here.
元组注意事项:
元组很像列表,不同之处在于一旦创建了元组就无法更改 ("immutable")。要创建元组,您可以使用圆括号 () 而不是方括号 []。
mylist = [2, 4, 6, 8]
mytuple = (2, 4, 6, 8)
你可以用同样的方式索引它们
mylist[0] # returns 2
mytuple[0] # returns 2 too
mylist[1:3] # returns the list [4, 6]
mytuple[1:3] # returns the tuple (4, 6)
并以同样的方式附加它们
[2,4] + [6,8] # returns [2,4,6,8]
(2,4) + (6,8) # returns (2,4,6,8)
空元组为(),单元素x的元组为(x,)
两者之间的转换很容易:
list(mytuple) # returns [2,4,6,8]
tuple(mylist) # returns (2,4,6,8)