需要帮助来提取柱状数据

时间:2013-03-31 20:24:02

标签: python

我编写了如下代码,通过拆分提取所有表格数据。现在我想要 通过删除表格中间的文本来提取最后一列(值)数据。

    import re
    f_read = open('filename','r')
    f_write=open('filename','w')
    str='CEN/4'
    for line in f_read:    
        m=re.search(str,line)
        if m:
           for line in f_read:      # loop over the rows
                if not line.strip():
                  continue
           line = line.split(' ',1)   # parse the columns
           print line
           f_write.writelines(line)

表看起来像这样后跟每列中的值。现在我想删除文本并提取值。

        S T R E S S E S   I N   Q U A D R I L A T E R A L   E L E M E N T S   ( Q U A D 4 )        OPTION = BILIN  

ELEMENT              FIBER            STRESSES IN ELEMENT COORD SYSTEM         PRINCIPAL STRESSES (ZERO SHEAR)               
  ID      GRID-ID   DISTANCE        NORMAL-X      NORMAL-Y      SHEAR-XY      ANGLE        MAJOR         MINOR       VON MISES 

  121      3423      342             4545          45435        4345           42353     3456456       67658          3435

3 个答案:

答案 0 :(得分:2)

如果我理解了您的问题,那么您的代码就会出现问题。值得注意的是,您无法以所示方式读取和写入同一文件。为了使情况复杂化,有嵌套的for循环,这两个循环都来自同一输入文件。

这是一个修订版本,可以通过写入单独的输出文件并在单for循环的控制下完成所有操作来避免这些问题。我还复制了输入文件中的数据行并更改了它上面的所有数字,因此它们以9开头,因此可以有多行数据用于测试目的。

import re

with open('filename','r') as f_read, open('filename2','w') as f_write:
    for line in (line.strip() for line in f_read):
        if re.search(r'^\d+', line):  # line starts with a number?
            columnar_data = ' '.join(line.split())
            print columnar_data
            f_write.write(columnar_data+'\n')

输出文件(filename2)的内容:

121 3423 342 4545 45435 4345 42353 3456456 67658 3435
921 9423 942 9545 95435 9345 92353 9456456 97658 9435

答案 1 :(得分:0)

我不清楚你要做什么。但是,如果你要做的就是读取该文件最后一行的数据,你可以这样做:

def read_last_line(file_path):
    f = open(file_path, 'r')
    lines = f.readlines()
    f.close()
    last_line = lines[-1].split()
    return last_line

请注意lines[-1]是获取数组中最后一个元素的快捷方法。在这种情况下,该数组是一个数组,其中每个元素都是文件中的一行。我认为这可能是你正在寻找的重要技巧。

答案 2 :(得分:0)

在这种情况下,我认为在实际情况中可能有许多行包含值(每个元素ID都有一个)。要仅输出所有值,我建议如下:

import re
f_read = open('quad4.txt','r')
f_write=open('quad4.out','w')
str = 'GRID-ID'
for line in f_read: 
    m=re.search(str,line)
    if m:
        break

for line in f_read:   # loop over the rows
    line = line.strip()
    if line:
        vallist = line.split()   # parse the columns
        print (vallist)
        f_write.write("%s\n" % "\t".join(vallist)

这将读取文件,直到找到包含“GRID-ID”的行,然后它开始拆分任何非空行并将其写入制表符分隔的列中。这使得进一步处理变得容易或者,在上面代码的倒数第三行,将值以方便的形式分成vallist以便进一步处理。请注意,在vallist中,值仍然是字符串,因此如果您要对它们进行计算,则需要先将它们转换为intfloat值。