我有一个如下文字文件。我想提取“参数------>”下面的行,直到参见文件nwirp_nsmc.sen获取参数灵敏度。“并写入不同的文本文件。我怎样才能做到这一点?
OPTIMISATION RESULTS
Covariance matrix and parameter confidence intervals cannot be determined:-
Some form or regularisation was implemented so these are not applicable.
Use the PREDUNC7 utility to obtain a full posterior covariance matrix.
Parameters ----->
Parameter Estimated value
1.hklay1 3.278692E-06
2.kppt1 4.249307E-07
3.kppt2 2.849132E-06
-------
-------
See file nwirp_nsmc.sen for parameter sensitivities.
Observations ----->
这是我尝试的但它不适用于我的文件。我知道我在这里遗漏了一些东西,但我现在不知道缺少什么。
inFile = open('nwirp-1.txt')
outFile = open('result2.txt', 'w')
new = []
Set = True
for line in inFile:
new.append(line)
if line.startswith("Parameters------>"):
#---- starts a new data set
if Set:
outFile.write("".join(new))
elif line.startswith("See file nwirp_nsmc.sen for parameter sensitivities."):
Set = False
new = []
inFile.close()
outFile.close()
答案 0 :(得分:1)
最简单的方法是转储文件并拆分:
with open('myfile') as fd:
relevent = fd.read().split("**")[1]
with open('outfile','w') as fd:
fd.write(relevent)
假设有一个" **"部分在中间,没有其他" **"。
=====================================
更改了问题
with open('nwirp-1.txt') as inFile, open('result2.txt', 'w') as outFile:
writing = False
for line in inFile:
if line.startswith("Parameters ----->"):
writing = True
if writing:
outFile.write(line)
if line.startswith("See file"):
writing = False
特别注意不要使用Set ,它是内置的。你很近,我把它修好了一点。另请注意很酷的with
语句,不需要close
。
答案 1 :(得分:1)
f = open("nwirp-1.txt")
for line in f:
if line.strip().startswith("Parameters ----->"):
f2 = open('result2.txt', 'w')
line = next(f)
while not line.strip().startswith("See file"):
f2.write(line)
line = next(f)
f2.close()
f.close()
输出
Parameter Estimated value
1.hklay1 3.278692E-06
2.kppt1 4.249307E-07
3.kppt2 2.849132E-06
4.kppt3 1.548621E-06
答案 2 :(得分:1)
您需要使用带有DOTALL标志的re。
import re
myre = re.compile(r"Parameters ----->(.*?)See file ", re.DOTALL)
parts = myre.findall(text)
if parts:
with open('foo.txt', 'w') as output:
for part in parts:
print(part, file=output)
else:
print("No match!")
请注意,这假设可能存在多个块,因此re中的?
使其非贪婪。