我正在尝试编写一段代码,将某些数字与文本文件中的行相乘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)
代码的问题在于它实际上并没有从实际文本文件中打印任何内容。
答案 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