Python 包含str和int的.txt文件的平均值
我正在创建一个函数,用于读取包含以下内容的Python 包含str和int的.txt文件的平均值,python,python-3.x,Python,Python 3.x,我正在创建一个函数,用于读取包含以下内容的.txt文件: Testing.txt: a 1 34 b 2 25 c 3 23 j 4 80 我需要创建一个函数来读取此文件并打印文件中每行最后2位的平均值 到目前为止,我得到的是: def Stats(): filename = input("Enter a file name: ") with open(filename) as f: data = [int(line) for line in f]
.txt
文件:
Testing.txt:
a 1 34
b 2 25
c 3 23
j 4 80
我需要创建一个函数来读取此文件并打印文件中每行最后2位的平均值
到目前为止,我得到的是:
def Stats():
filename = input("Enter a file name: ")
with open(filename) as f:
data = [int(line) for line in f]
print("The average value is ", sum(data)/len(data))
Stats()
优点:
- 此函数将生成函数中int值的平均值
- 如果文件中包含str,它将不起作用
问题:如何让我的函数与上面列出的文件(testing.txt)一起工作?我想这就是您想要的:
# filename = input("Enter a file name: ")
filename = "input.txt"
def avg_file(filename):
with open(filename, 'r') as f:
data = [int(line.split()[2]) for line in f]
return sum(data)/len(data)
avg = avg_file(filename)
print("The average value is: ", avg)
# The average value is: 40.5
关键是这个
line.split()[2]
。这将基于空格分割一条线,并取第三个值。我想这就是您想要的:
# filename = input("Enter a file name: ")
filename = "input.txt"
def avg_file(filename):
with open(filename, 'r') as f:
data = [int(line.split()[2]) for line in f]
return sum(data)/len(data)
avg = avg_file(filename)
print("The average value is: ", avg)
# The average value is: 40.5
关键是这个
line.split()[2]
。这将基于空格拆分一行,并取第三个值。您可以通过这种方式忽略非数字:
data = [int(token) for token in f.read().split() if token.isdigit()]
您可以通过以下方式忽略非数字:
data = [int(token) for token in f.read().split() if token.isdigit()]
比如说:
import csv
def mean(lst): return sum(lst) / len(lst)
with open('input.txt') as f:
reader = csv.reader(f, delimiter=' ')
lines = [line for line in reader]
col3 = [int(line[2]) for line in lines]
print(mean(col3)) # 40.5
def mean(lst): return sum(lst) / float(len(lst))
with open('input.txt') as f:
lines = [line.split() for line in f]
col3 = [int(line[2]) for line in lines]
print mean(col3) # 40.5
这只是使用csv模块将文件行解析为包含元素的行。您可以通过以下方式完成相同的任务:
import csv
def mean(lst): return sum(lst) / len(lst)
with open('input.txt') as f:
reader = csv.reader(f, delimiter=' ')
lines = [line for line in reader]
col3 = [int(line[2]) for line in lines]
print(mean(col3)) # 40.5
def mean(lst): return sum(lst) / float(len(lst))
with open('input.txt') as f:
lines = [line.split() for line in f]
col3 = [int(line[2]) for line in lines]
print mean(col3) # 40.5
比如说:
import csv
def mean(lst): return sum(lst) / len(lst)
with open('input.txt') as f:
reader = csv.reader(f, delimiter=' ')
lines = [line for line in reader]
col3 = [int(line[2]) for line in lines]
print(mean(col3)) # 40.5
def mean(lst): return sum(lst) / float(len(lst))
with open('input.txt') as f:
lines = [line.split() for line in f]
col3 = [int(line[2]) for line in lines]
print mean(col3) # 40.5
这只是使用csv模块将文件行解析为包含元素的行。您可以通过以下方式完成相同的任务:
import csv
def mean(lst): return sum(lst) / len(lst)
with open('input.txt') as f:
reader = csv.reader(f, delimiter=' ')
lines = [line for line in reader]
col3 = [int(line[2]) for line in lines]
print(mean(col3)) # 40.5
def mean(lst): return sum(lst) / float(len(lst))
with open('input.txt') as f:
lines = [line.split() for line in f]
col3 = [int(line[2]) for line in lines]
print mean(col3) # 40.5
大概是这样的:
data = [sum(map(int, line.split(' ')[1:])) / 2 for line in f]
或者更老派的东西,以防字符串和int值的未知组合:
data = []
for line in f:
integers = []
for segment in line.split():
try:
integers.append(int(segment))
except ValueError:
pass
data.append(sum(integers) / len(integers))
大概是这样的:
data = [sum(map(int, line.split(' ')[1:])) / 2 for line in f]
或者更老派的东西,以防字符串和int值的未知组合:
data = []
for line in f:
integers = []
for segment in line.split():
try:
integers.append(int(segment))
except ValueError:
pass
data.append(sum(integers) / len(integers))