Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 包含str和int的.txt文件的平均值_Python_Python 3.x - Fatal编程技术网

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))