我编写了如下代码,通过拆分提取所有表格数据。现在我想要 通过删除表格中间的文本来提取最后一列(值)数据。
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
答案 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
中,值仍然是字符串,因此如果您要对它们进行计算,则需要先将它们转换为int
或float
值。