我是python的新手。我有一个.f06
文件(nastran输出文件),它的大小约为1gb,有800万行。 Notepad ++和Textpad无法打开此文件。我想开发一个GUI来打开此文件的类型,并在文本编辑小部件中显示它。但是此操作需要很长时间,这种情况对我没有用。
下面您可以看到我的代码。
文本编辑小部件对象的名称为txtf06。
表单对象名称是表单。
我有两个特定的边界,分别是“网格点力”和“ MSC.NASTRAN工作已创建”。我想将这两个边界之间的所有行写到我的文本编辑小部件中。它将有大约4m条线。
def btnImportClickEvent():
import re
fileName = form.tbPath.text(): #.f06 path
file = open(fileName,'r')
startFilter = "GRID POINT FORCE" #start point
endFilter = "MSC.NASTRAN JOB CREATED" #end point
startRegex = re.compile(startFilter, re.DOTALL)
endRegex = re.compile(endFilter; re.DOTALL)
status = True
for i in file:
searchObj = startRegex.searc(i)
if searchObj:
while (status==True):
form.txtf06.append(file.readline())
searchObj = endRegex.search(i)
if searchObj:
break
break
file.close()
答案 0 :(得分:0)
您可以分块读取文件,并将数据用于进一步处理。
请参见下面的示例,该文件是按块读取的,它按块返回数据,您可以根据需要对其进行处理。
def read_file_in_chunks(filename, chunk_size = 1000):
with open(filename, 'r')as fp:
data = "some string to enter in while loop"
while data:
data = fp.read(chunk_size)
yield data
#usage
filename = r"some file path"
for data in read_file_in_chunks(filename):
print data
答案 1 :(得分:0)
您可以使用它来提取标记之间的部分,然后使用其他工具(例如numpy
或pandas
)进行处理:
def extract_between(infile, outfile, start="GRID POINT FORCE", end="MSC.NASTRAN JOB CREATED"):
with open(infile, 'r') as i, open(outfile, 'w') as o:
while not start in i.readline():
pass
# found start
# this part could be written nicer with PEP 572
line = i.readline()
while not end in line:
o.write(line)
line = i.readline()
通过在sed
之类的shell中使用bash
,这变得更加容易:
sed -n '/GRID POINT FORCE/,/MSC.NASTRAN JOB CREATED/p' infile.txt | sed '1d;$d' > outfile.txt
第一行sed
提取标记之间的每一行(包括标记),第二行sed
移除第一行和最后一行(开始和结束标记)。
答案 2 :(得分:0)
考虑使用Steve Doyle的精彩pynastran python库。它们是免费的,允许您直接从op2(或从f06,但不建议)中提取所需的所有数据。 Op2读取更快,更完整。