从外部文件中读取值,添加它们,打印结果
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
等
符合我的需求。
问题: 我有 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
等 符合我的需求。