使用Python识别缺少的文本序列项

时间:2013-11-22 18:50:24

标签: python python-2.x

我有一个包含钻孔,深度截距和哪个地质单元相交的地质数据集。一些地质单元交叉点尚未添加到数据集中,我想使用Python生成缺少交叉点的钻孔列表。

我也想知道缺少交叉点的顺序。理想的输出将是一个显示“DRILLHOLE,MISSING SEQUENCE ITEM”的文件。在UNIT列中可以接受空值,因为并非每个从 - 到间隔都是命名的UNIT。

在下面的数据集中,第二个洞在单位序列中缺少“RED SS”。它可能不是物理存在的 - 但对于我的用例,它需要作为零厚度存在于数据库中。输入文件都是csv文件。

示例数据集可能如下所示(实际数据集大约为15,000行):

DRILLHOLE, TOP, BASE, MATERIAL, UNIT
HOLE-A, 0, 5, GRAVEL, 'BILL'S GRAVEL'
HOLE-A, 5, 7, CLAY, <NULL>
HOLE-A, 7, 10, SANDSTONE, 'RED SS'
HOLE-A, 10, 15, CLAYSTONE, <NULL>
HOLE-A, 15, 20, CLAYSTONE, 'BASEMENT'
HOLE-B, 0, 2, GRAVEL, 'BILL'S GRAVEL'
HOLE-B, 2, 4, CLAY, <NULL>
HOLE-B, 4, 11, SANDSTONE, <NULL>
HOLE-B, 11, 17, CLAYSTONE, <NULL>
HOLE-B, 17, 20, CLAYSTONE, 'BASEMENT'

序列列表看起来像(例如):

BILL'S GRAVEL
RED SS
BASEMENT

3 个答案:

答案 0 :(得分:0)

查看csv module。 CSV已经完成了识别哪些字段为空的工作,因此您已经有了很大的优势。

答案 1 :(得分:0)

您在使用名称单位的字符串时遇到问题。 尝试将它们“改为”变成一种事情:

钻孔,顶部,基础,材料,单元 HOLE-A,0,5,GRAVEL,“BILL'S GRAVEL” HOLE-A,5,7,CLAY,“NULL”

答案 2 :(得分:0)

如果您将数据保存在名为“data”且扩展名为.txt的文本文件中,然后在数据文件所在的目录中运行以下代码,则可以找到所有具有NULL值的行:

data = open("data.txt").read()
dataRows = data.split("\n")
for row in dataRows:
  cells = row.split(",")
  for cell in cells:
    if cell == " <NULL>":
      print row

使用您提供的示例数据从此代码输出:

HOLE-A, 5, 7, CLAY, <NULL>
HOLE-A, 10, 15, CLAYSTONE, <NULL>
HOLE-B, 2, 4, CLAY, <NULL>
HOLE-B, 4, 11, SANDSTONE, <NULL>
HOLE-B, 11, 17, CLAYSTONE, <NULL>