从文件中获取特定字符串以对其进行操作

时间:2013-09-06 08:56:23

标签: python

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

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

这些事件发生在探测器的特定区域cells。每个单元格都有两个通道,我可以使用一种由partition module数字和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 个答案:

答案 0 :(得分: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:]

答案 1 :(得分: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](浮点数)

答案 2 :(得分:0)

使用:

for line in file:
    partition_module, channel, _ ,data = line.strip().split()
    partition = partition_module[:3]
    module = partition_module[3:]

答案 3 :(得分: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