0

我是物理学家,在编程问题上需要一些帮助!我有一组数据,其中包含许多事件,对于每个事件,都会调用一个函数,就像这样

for event in range(100000):
    ProcessRegion(region, event)

这些事件发生在探测器的特定区域,称为cells. 每个单元格都有两个通道,我可以使用一种由partitionamodule数字和 a组成的地址来知道事件发生的确切区域channel。有4个分区(LBA、LBC、EBA、EBC),64个模块和47个通道。我有三个长文件,其中包含我必须使用的更多数据,它们的格式如下

EBC64 41 1    1.012327
EBC64 42 0    1.000000
EBC64 42 1    1.000000
EBC64 43 0    1.000000
EBC64 43 1    1.000000
EBC64 44 0    1.000000
EBC64 44 1    1.000000
EBC64 45 0    1.000000
EBC64 45 1    1.000000
EBC64 46 0    1.000000
EBC64 46 1    1.000000
EBC64 47 0    1.000000
EBC64 47 1    1.000000

这样您就可以看到分区和模块(如 EBC64)一个空格和通道号,最后一列是我要使用的数据。我想从中读取三个这样的文件,我的问题是使用类似的方法

def ProcessRegion(region, event):

    partition = region.get_partiotion()
    module    = region.get_module()
    channel   = region.get_channel()

我怎样才能在这三个文件中获得准确的行,以便我可以提取数据并将其用于分析?

编辑:

对不起这个晦涩的问题,我试着更好地解释它。

有了分区模块和通道,我想在三个文件中的每一个中找到与其对应的数据,例如对于一个事件,我有分区 = EBC,模块 = 64,通道 = 41。现在有了这些信息,我想调查三个不同的文件来获取数据,所以在这种情况下,从上面的列表中,将是 1.012327。我希望这能澄清一点,如果不是我可以再重写一次!

4

4 回答 4

1

如果我理解正确,这就是我会做的。我不知道 zero_one 是什么,但它似乎是 0 或 1。

for line in lines:
    partition_module, channel, zero_one, value = line.split()
    partition = partition_module[:3]
    module = partition_module[3:]
于 2013-09-06T09:07:54.950 回答
1

听起来您只是在询问基本文件和解析操作。我会做类似的事情

f = open("file.txt")
for line in f:
    event = [x for x in line.split(' ') if x]
    partition = event[0][:3]
    module = int(event[0][3:])
    channel = int(event[1])

详细地

f = open("file.txt")

将打开 file.txt 是文件名的文件。

for line in f:

将遍历文件中的每个输入行,因为每个事件都在一行上,所以每个事件将是一行文本。

event = filter(None, line.split(' '))

将用空格分割行,然后删除所有空字符串。

partition = event[0][:3]

将读取第一个块的前三个字符(空格前的第一个文本块),这将是分区。

module = int(event[0][3:])

将从第 4 个字符读取到第一个块的末尾,然后将其解释为数字。

channel = int(event[1])

将读取整个第二块并解释为数字。

然后剩余的数据将在(示例中的单个 1 或 0)事件 [2] 和事件 [3](浮点数)中

于 2013-09-06T09:14:34.240 回答
0

利用:

for line in file:
    partition_module, channel, _ ,data = line.strip().split()
    partition = partition_module[:3]
    module = partition_module[3:]
于 2013-09-06T09:05:57.320 回答
0

尝试这样的事情:

from __future__ import division

fin = open('data.txt')
data = fin.readlines()
fin.close()

for row in data:
    partition,module,channel,value = row.split()
    value = float(value)
    print partition,module,channel,'value:',value

出去:

EBC64 41 1 value: 1.012327
EBC64 42 0 value: 1.0
EBC64 42 1 value: 1.0
EBC64 43 0 value: 1.0
EBC64 43 1 value: 1.0
EBC64 44 0 value: 1.0
EBC64 44 1 value: 1.0
EBC64 45 0 value: 1.0
EBC64 45 1 value: 1.0
EBC64 46 0 value: 1.0
EBC64 46 1 value: 1.0
EBC64 47 0 value: 1.0
EBC64 47 1 value: 1.0
于 2013-09-06T09:06:52.537 回答