文本文件中8个值的中位数

时间:2019-07-15 03:19:27

标签: python parsing text median

我有一个文本文件,具有36000个值。每行一个值。 我需要计算8个值的中位数,然后移至下一个8个值,依此类推。这是我到目前为止编写的代码。

num_lines = open('median_raw.txt').read().count('\n')
print(num_lines)
median_values =0
count2 = count1

while count2<=num_lines:
    file_name = open("median_raw.txt", 'r+')
    f= open('median_parsed' + '.txt', 'w+')
    for line_no1, line1 in enumerate (file_name):
        median_values=(statistics.median([line1, int(next(line1))]))
        f.writelines([median_values])
        count2= count2+8

file_name.close()
f.close()

2 个答案:

答案 0 :(得分:2)

这是比较惯用的东西。它使用的是来自itertools的islice,它一次读取第8行,一次仅保存8行。因此,对于较大的文件,您不会看到内存问题。

from itertools import islice
from statistics import median

with open('median_raw.txt') as f, open('median_parsed.txt', 'w+') as fout:

    while True:

        val = [int(s) for s in islice(f, 8)]

        if not val:
            break

        avg = median(val)

        print(f'the median of {val} is {avg}')
        fout.write(f'{avg}\n')

即使输入的行数不能被8整除,这也可以正常工作。当islice返回空列表时,我们将停止迭代。

答案 1 :(得分:0)

也许尝试一下:

Nested Graph

第1行将为您创建一个范围,以8为一组的方式遍历文件。 然后,每个新循环将收集由当前“ bin”调制的0到8的平均值。

这仅在您的起始文件换行长度可被8整除的情况下有效