练习一些Python并试图解决一个问题,该问题要求在文本文件中获取学生的平均年龄。例如如下所示的.txt文件。
Sam, 23
Jack 20
Tara 19
Stacy 22
通常我会用错误消息重新跟踪我的步骤,但是我的输出仅为0。我不确定使用read而不是readlines是否正确。
def sumNums():
infile = open('student_age.txt', 'r')
fileContents = infile.read()
infile.close
count= 0
for lines in fileContents.split(','):
if lines.isdigit():
count += lines
print(sum(count) / len(lines))
实际输出应为21,因为84/4 = 21,但我得到0
答案 0 :(得分:0)
开始更简单。首先,简单地编写将在像这样的逗号分隔文件的各行之间进行迭代的代码,并打印出每行的第二个值(数字)。
with open('path/to/file.csv') as f:
for line in f:
field1, field2 = line.split(',')
print(field2)
然后,您可以开始考虑如何处理将这些值保存在内存中并对其求平均。
with open('path/to/file.csv') as f:
total = 0
count = 0
for line in f:
field1, field2 = line.split(',')
total += int(field2)
count += 1
result = total / count
和然后,您可以看看如何使用stdlib csv
模块对其进行重构。
import csv
with open('path/to/file.csv') as f:
reader = csv.reader(f)
numbers = [int(num) for _, num in reader]
total, count = sum(numbers), len(numbers)
result = total / count
答案 1 :(得分:0)
尝试使用
int(float("age"))
这应该将字符串转换为数值,您可以轻松地从中取平均值
sum("age")/len("age")
答案 2 :(得分:0)
这是完成此任务的另一种方法:
rentLabel
答案 3 :(得分:0)
def sumNums():
with open('student_age.txt', 'r') as f:
count = i = 0
for line in f:
name, number = line.split(',')
if number.strip().isdigit():
count += int(number)
i += 1
print(count / i)
sumNums()
答案 4 :(得分:-1)
您的文件处理不正确。 infile.read()
返回文件中的所有行。因此,您应该首先用'\n'
符号将其分割,然后再使用',':
for line in fileContents.split('\n'):
for element in line.split(','):
...
但是有更好的解决方案...
import pandas as pd
df = pd.read_csv('student_age.txt', headers=None)
df[1].mean() # If you have more than 2 columns, 1 can be replaced by the actual column
三行代码,您就是国王。