1

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

    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
4

3 回答 3

2

如果我理解了您的问题,那么您的代码有几处问题。值得注意的是,您不能以所示方式读取和写入同一文件。使情况复杂化的是,存在嵌套for循环,它们都从同一个输入文件中读取行。

这是一个修改后的版本,它通过写入单独的输出文件并在单循环的控制下做所有事情来避免这些问题for。我还复制了输入文件中的数据行并更改了上面的所有数字,因此它们以 a 开头,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
于 2013-04-01T01:49:37.373 回答
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]是获取数组中最后一个元素的快速方法。在这种情况下,该数组是一个数组,其中每个元素都是文件中的一行。我认为这可能是您正在寻找的重要技巧。

于 2013-03-31T20:50:01.460 回答
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值仍然是字符串,因此如果要对它们进行计算,则需要先将它们转换为intorfloat值。

于 2013-03-31T21:00:24.090 回答