从外部文件中读取值,添加它们,打印结果

Read in Values from external file, add them, print results

问题: 我有 50 个文本文件,每个文件都有数千行文本,每一行都有一个值。我只对靠近中间的一小部分感兴趣(第 757-827 行 - 实际上是我感兴趣的第 745-805 行,但每个文件的前 12 行都是无关紧要的内容)。我想读入每个文件。然后合计这些行之间的值。最后,我希望它以格式 (((n+1)*18),total count) 打印一对数字,其中 n 是文件的编号(因为它们是从零开始编号的)。然后重复所有 50 个文件,给出 50 对数字,看起来像:

(18,77),(36,63),(54,50),(72,42),...

代码:

import numpy as np
%matplotlib inline
from numpy import loadtxt, linspace
import glob, os

fileToRun = 'Run0'
location = 'ControlRoom6'
DeadTime = 3
LiveTime = 15 

folderId = '\'
baseFolder = 'C:'+folderId+'Users'+folderId+location+folderId+'Documents'+folderId+'PhD'+folderId+'Ubuntu-Analysis-DCF'+folderId+'DCF-an-b+decay'+folderId+'dcp-ap-27Al'+folderId+''
prefix = 'DECAY_COINC'

folderToAnalyze = baseFolder + fileToRun + '\'
MaestroT = LiveTime + DeadTime

## Gets number of files
files = []
os.chdir(folderToAnalyze)
for file in glob.glob(prefix + "*.Spe"):
    files.append(file)
numfiles = len(files)
if numfiles<=1:
    print('numfiles is {0}, minimum of 2 is required'.format(numfiles))
    raise SystemExit(0)
    
    xmin = 745
    xmax = 815
    skips = 12
    
    n=[]
    count=[]
    
    for n in range(0, numfiles):
    
        x = np.linspace(0, 8191, 8192)
        finalprefix = str(n).zfill(3)
        fullprefix = folderToAnalyze + prefix + finalprefix
        y = loadtxt(fullprefix + ".Spe", skiprows = 12, max_rows = 8192) 
    
        
        for x in range(xmin+skips,xmax+skips):
            count = count + y
            time = MaestroT*(n+1)
            
            print(time, count)

当前输出为: 'ValueError Traceback(最后一次调用) 在 84 范围内的 x 为 85(xmin+skips,xmax+skips): ---> 86 计数 = 计数 + y 87 时间 = MaestroT*(n+1) 88

ValueError: 操作数无法与形状一起广播 (0,) (8192,)'

然而我以前确实有这个 ,它只是打印出数千个看似无关的数字。有谁知道我如何修改代码以达到预期的结果?

编辑:数据集

为了使示例更易于使用,我制作了一个带有一些虚拟数据的保管箱。这些文件的名称与读入的名称相同,并以相同的格式写入(前 12 行包含无用信息)。 Link 是 Here。我没有写 8192 虚拟数字,因为我认为它可能会更容易并生成更接近的传真,只使用更改了几个数字的实际文件。

解决方案是编辑代码,如图所示,从 'xmin = 745':

开始
xmin = 745
xmax = 815
skip = 12

for n in range(0, numfiles):

    total = 0
    
    x = np.linspace(0, 8191, 8192)
    finalprefix = str(n).zfill(3)
    fullprefix = folderToAnalyze + prefix + finalprefix
    y = loadtxt(fullprefix + ".Spe", skiprows= xmin + skip, max_rows = xmax - xmin)

    
    for x in y:
        val = int(x)
        total = total + val
    
    print(((n+1)*MaestroT), total)

打印为

18 74

36 64

54 62

72 54

90 47

108 39

126 40

144 35

等 符合我的需求。