如何将数字与文本文件中的行相乘?

时间:2017-05-04 19:00:52

标签: python

我正在尝试编写一段代码,将某些数字与文本文件中的行相乘3.但是,每行都有字符串字符,每个数字用逗号分隔。这是一个游戏排行榜,我只是想学习和练习Python。每一行都有玩家的昵称,比赛结果,比赛胜利和分别列出的比赛,每个项目用逗号分隔(没有空格),每个玩家玩了24场比赛。

文本文件中的一行代码为:

DarrenL,24,12,12
Philippa93,24,9,15
TommyBoy,24,0,24

目标:

  • 将文本文件读入代码(已完成)
  • 从每一行获得比赛并将其乘以三

这是我已经拥有的代码:

print("Leaderboard")
print("Only players who have won one or more matches will be displayed")
results = open('results.txt', 'r').readlines()
with open('results.txt', 'r') as leaderboard:
    import re
    output = []
    with open('firesideResults.txt.txt') as file:
        for line in file:
            matchesWon = re.search(r'\d+,?\d*', line)
            if matchesWon:
                points = output.append(float(matchesWon.group()))
                print(points * 3)

代码的问题在于它实际上并没有从实际文本文件中打印任何内容。

2 个答案:

答案 0 :(得分:1)

您可以使用split()

,而不是使用RegEx
  

使用 sep 作为分隔符字符串,返回字符串中的单词列表。

例如:

>>> "DarrenL,24,12,12".split()
['DarrenL,24,12,12']

使用Python 3.5,您可以使用Unpacking Generalizations分隔名称,例如:

>>> line = "DarrenL,24,12,12"
>>> name, *points = line.split(',')
>>> name
'DarrenL'
>>> points
['24', '12', '12']

在Python 3.5之前,您可以写:

parts = line.split(',')
name = parts[0]
points = parts[1:]

转换为int和乘以3可以使用理解列表完成:

points = [int(x) * 3 for x in points]

以下是生成的代码:

lines = [
    "DarrenL,24,12,12\n",
    "Philippa93,24,9,15\n",
    "TommyBoy,24,0,24\n"]

for line in lines:
    line = line.strip()
    name, *points = line.split(",")
    points = [int(x) * 3 for x in points]
    print(name, *points)

打印:

DarrenL 72 36 36
Philippa93 72 27 45
TommyBoy 72 0 72

如果您真的想要RegEx,可以使用re.findall()

  

返回 string pattern 的所有非重叠匹配项,作为字符串列表。

import re
print(re.findall(r"\d+", "DarrenL,24,12,12\n"))

你会得到:

['24', '12', '12']

答案 1 :(得分:0)

这是一个开始:

file = open('results.txt').readlines()

file = [i.strip('\n').split(',') for i in file]

现在,您有一个二维列表,它存储了您的所有数据属性。

updated = {i[0]:map(int, i[1:]) for i in file}

final_updated = {a:[b[i] if i == 0 or i == 2 else b[i]*3 for i in range(len(b))] for a, b in updated.items()]

如果您只想列出所有球员及其得分乘以3:

for player, scores in final_updated.items():
    print player, scores

如果你只想向玩家展示在任何比赛中没有得分为零:

for player, scores in final_updated.items():
    if 0 not in scores:
       print player, scores