问题: 我有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回溯(最近一次调用上次) 在里面 84 85表示范围内的x(xmin+跳过,xmax+跳过): ---&燃气轮机;86计数=计数+y 87时间=大师*(n+1) 88
ValueError:操作数无法与形状(0,)(8192,)一起广播'
然而,我以前确实有这个running,它只是打印出数千个看似不相连的数字。有人知道我如何修改代码以获得期望的结果吗
编辑:数据集
为了使示例更易于使用,我制作了一个带有一些虚拟数据的dropbox。这些文件的名称与读取时的名称相同,并且以相同的格式写入(前12行包含无用信息)。链接是Here。我没有写8192个虚拟数字,因为我认为这可能会更容易,并且产生一个更接近的传真,只使用实际文件,并更改一些数字
解决方案是编辑代码,如图所示,从'xmin=745'开始:
打印为
18 74
36 64
54 62
72 54
90 47
108 39
126 40
144 35
等等。 适合我的需要
相关问题 更多 >
编程相关推荐