python中的一个初学者任务,具有txt数据处理功能,列中的数字总和

2024-05-15 20:38:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的txt文件,数据格式如下:

Name Points
Joe 1
Joe 5
Anna 6
Anna 1
Eva 9
Eva 6

(有更多行和名称,但每个名称的行数相同。)

我需要一个列表中每个名字的数字之和,主要目标是找到前十个名字的总和最大

诸如此类:

Best:
Eva 15
Anna 7
Joe 6

你将如何解决它

(我试过了,现在我被卡住了: 我可以打开文件,将其拆分为行,然后将其拆分为以下文字:

file = open('sum.txt')

with open('sum.txt') as f:
    line = f.readlines()

line[1].split()

但所有其他类型的解决方案都是受欢迎的。)


Tags: 文件nametxt名称列表line数字open
3条回答

这听起来很像一项任务,所以我不会给你一个完整的解决方案,但我会引导你朝着正确的方向前进

到目前为止,您所做的看起来不错,您已经打开了文件并阅读了这些行。然后可以在for循环中对它们进行迭代

for line in f.readlines():
    parts = line.split()

可以使用int()float()函数将字符串转换为数字。那就只需要把钱存到哪里。我建议使用返回dict()的工厂的collections.defaultdictcollections.defaultdict

import pandas as pd

data = pd.read_csv(your_path.txt, sep="\t")

data["Tot Points"] = data.groupby("Name")["Points"].transform(sum) 
data.sort_values(by="Tot Points", ascending=False, inplace=True) 
data.drop_duplicates(subset=["Name"], inplace=True) 
data.drop(columns="Points", inplace=True) 
data = data.head(n=10)

data.to_csv("output_path.txt", sep="\t", index=False)

这听起来像是家庭作业

# Naive implementation in Python 3.x.
from collections import defaultdict

with open("sum.txt") as f:
    content = f.read()
lines = content.strip("\n").split("\n")

item_count = defaultdict(int)
for line in lines:
    name, count = line.split(" ")
    item_count[name] += count

sorted_tuples = sorted(item_count.items(), key=lambda item: item[1], reverse=True)
top_ten = dict(sorted_tuples[:10])

相关问题 更多 >