Skip to main content
 首页 » 编程设计

python之从许多文本文件中读取数字并对它们进行平均 Python

2025年05月04日17TianFang

我刚开始使用 python,我有大约 6000 个 .txt 文件,每个文件在一列中包含几个数字,例如:

文件1.txt:

2

43

78

文件2.txt:

98

12

    and so on 

我想读取它们并将它们存储在一个数组中并计算其平均值。 (2,43,78,98,12..) 的平均值,即所有文件中的所有数字均应为 1 当我读取和存储它们时,它们看起来像:

['2, 43, 78', '98, 12',..]

...(我去掉了'\n') 但是当我使用 ave = sum(a)\float(len(a)) 时,我得到了一个错误。 我究竟做错了什么? 有什么我错过的或其他方法吗?

代码:

import fnmatch 
import os 
 
rootPath = 'D:/Data' 
pattern = '*.txt' 
all_data = [] 
for root, dirs, files in os.walk(rootPath): 
    for filename in fnmatch.filter(files, pattern): 
        #print( filename ) 
        name = os.path.join(root, filename) 
        str = open(name, 'r').read() 
        #print str 
        all_data.append(str) 
a=[item.replace('\n', ' ') for item in all_data] 
#print a 
for val in a: 
    values = map(float, val.split(", ")) 
    ave = sum(values)/len(values) 
    print ave 

我得到错误:

invalid literal for float()

请您参考如下方法:

sum("abc") 未定义。 sum("2, 43") 也不是。 sum 仅适用于数字类型。

您需要先拆分行并将值转换为数值(我在这里使用了float,因为这样sum 将是一个float,因此无需将 len 转换为 float):

rows = ['2 43 78', '98 12'] 
total_sum = total_len = 0 
for row in rows: 
    values = map(float, row.split()) 
    total_sum += sum(values) 
    total_len += len(values) 
print total_sum/total_len 

对于 Python 3.x,将 print avg 替换为 print(avg) 并在 map 周围添加一个 list() ,否则 len 没有为它定义。

这类似于@VadimK在his answer ,但避免了列表加法,而是只进行整数加法。