Python文件读取问题,可能是infile循环?

2024-05-14 13:43:59 发布

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

问题如下:“编写一个Python程序来读取包含湖泊和鱼类数据的文件,并设置报告 湖泊识别号、湖泊名称和鱼类重量以表格形式显示(使用 带格式的字符串区域)。程序应该计算鱼的平均重量 已报告。”

湖泊识别

1000 Chemo
1100 Greene
1200 Toddy

“我必须读的文件”FishWeights.txt文件“包含以下数据

1000 4.0
1100 2.0
1200 1.5
1000 2.0
1000 2.2
1100 1.9
1200 2.8

我的代码

f = open("fishweights.txt")
print(f.read(4), "Chemo", f.readline(4))
print(f.read(5), "Greene", f.read(5))
print(f.read(4), "Toddy", f.read(5))
print(f.read(5), "Chemo", f.read(4))
print(f.read(5), "Chemo", f.read(4))
print(f.read(5), "Greene", f.read(4))
print(f.read(5), "Toddy", f.read(4))

我收到的输出是

1000 Chemo  4.0

1100 Greene  2.0

1200 Toddy  1.5

1000  Chemo 2.0

1000  Chemo 2.2

1100  Greene 1.9

1200  Toddy 2.8 

这是正确的程度,我必须有湖的身份证号码,名称和每湖鱼的重量显示。但我需要有一个计算方法,它能计算出最后所有鱼的重量的平均值。 输出格式应整齐,如下所示

1000     Chemo      4.0
1100     Greene     2.0
1200     Toddy      1.5
1000     Chemo      2.0
1000     Chemo      2.2
1100     Greene     1.9
1200     Toddy      2.8
The average fish weight is: 2.34

任何帮助是感激的,只是一个初学者在这里寻求帮助有一个完整的主题理解。谢谢您!你知道吗


Tags: 文件数据程序txt名称read格式报告
3条回答

所以你可以把鱼的重量和湖的数据存储在两个数组中。请参见下面的内容,其中它读取每一行,然后将它们拆分为鱼的重量列表和湖泊数据列表。你知道吗

text=f.readlines()
fishWeights=[] 
lakeData=[]
for item in text:
    fishWeights.append(item.split(' ')[1])
    lakeData.append(item.split(' ')[1])

从这里你可以输出信息

for i in range(len(fishWeights)) :
    print(lakeData[i], "Your Text", fishWeights[i])

你可以计算出你的平均数

total=0
for weight in fishWeights:
    total+=weight
total/=len(fishWeights) 

你可以把你的湖名储存在字典里,把你的数据储存在一个列表里。在这个示例中,您只需在列表fish中循环,并获得与id对应的湖名称。最后,只需将列表中的weight相加,然后除以fish的长度,就可以打印出下面的平均值。你知道吗

with open('LakeID.txt','r') as l:
    lake = l.readlines()
    lake = dict([i.rstrip('\n').split() for i in lake])

with open('FishWeights.txt','r') as f:
    fish = f.readlines()
    fish = [i.rstrip('\n').split() for i in fish]

for i in fish:
    print(i[0],lake[i[0]],i[1])    

print('The total average is {}'.format(sum(float(i[1]) for i in fish)/len(fish))) 

还鼓励您使用with open(..)上下文管理器,确保文件退出时关闭。你知道吗

是的,你需要绕线。这是您要查找的结构:

with open("fishweights.txt") as fo:
    for line in fo:
        pass

现在为了检索每一行的每一部分,您可以使用line.split()。如果id的长度是固定的,那么读取固定数量的字节(正如您所做的)是很好的。你确定每个id都有4位数字吗?这样可能更好:

raw_data = []
with open("fishweights.txt") as fo:
    for line in fo:
        row = line.strip().split()
        if not row:
            continue  # ignore empty lines
        id = int(row[0])
        no = float(row[1])
        raw_data.append((id, no))

既然有了原始数据,就需要对其进行聚合:

sum = 0
count = 0
for id, no in raw_data:
    sum += no
    count += 1
avg = sum / count

或一个班轮

avg = sum(no for id, no in raw_data) / len(raw_data)

最后,您需要将ID映射到名称,以便最终打印:

id_to_name = {
    1000: 'Chemo',
    1100: 'Greene',
    1200: 'Toddy',
}
for id, no in raw_data:
    print(id, id_to_name[id], no)
print('Average: ', avg)

当然,所有三个循环都可以组合成一个循环。我将其划分,以便您可以清楚地看到代码的每个阶段。最终结果(稍微优化)可能如下所示:

id_to_name = {
    1000: 'Chemo',
    1100: 'Greene',
    1200: 'Toddy',
}
sum = 0
count = 0
with open("fishweights.txt") as fo:
    for line in fo:
        row = line.strip().split()
        if not row:
            continue  # ignore empty lines
        id = int(row[0])
        no = float(row[1])
        sum += no
        count += 1
        print(id, id_to_name[id], no)
print('Average:', sum/count)

相关问题 更多 >

    热门问题