我正在尝试在Python中执行一个读取文件(A.out
)的脚本,当它检测到关键字时,会开始将文件A.out
复制到B.out
。
文件A.out
类似于:
CYCLE: 194 TIME: 0.025 TIME LEFT: 2.00D GRAD.: 1.872 HEAT: -420.1845
CYCLE: 195 TIME: 0.025 TIME LEFT: 2.00D GRAD.: 2.232 HEAT: -420.1653
CYCLE: 196 TIME: 0.025 TIME LEFT: 2.00D GRAD.: 1.981 HEAT: -420.1703
EXCESS NUMBER OF OPTIMIZATION CYCLES
CURRENT VALUE OF GRADIENT NORM = 1.890706
CURRENT VALUE OF GEOMETRY
C -2.05768505 +1 4.28867630 +1 0.07135650 +1
O -0.75590874 +1 4.69719052 +1 -0.38910531 +1
H -0.78776710 +1 4.91862889 +1 -1.39007889 +1
C -2.73026659 +1 3.32072929 +1 -0.89832955 +1
# it ends here
我制作的剧本应该找到“几何的当前价值”#34;之后4行开始复制来自" A"到" B"。但它没有用。 代码是:
import os
from os.path import exists, splitext
def out_to_mop_let (fileA, fileB, keywords=""):
fileA="A.out"
fileB="B.out"
filein=open(fileA, "r")
fileout=open(fileB, "w")
lines = filein.readlines()
filein.close()
lstart = None
lfinish = None
for lindex in range(0,len(lines)):
if lindex-4>lstart and lines[lindex]=='\n' and lfinish==None and lstart!=None:
lfinish=lindex+1
if " CURRENT VALUE OF GEOMETRY" in lines[lindex]:
lstart=lindex
print lstart
print lfinish
fileout.write(keywords + "\n\n\n")
for lindex in range(lstart+4,lfinish):
fileout.write(lines[lindex])
fileout.close()
filein.close()
但是当我执行它时,终端返回:
for lindex in range(lstart+4,lfinish):
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
我不知道如何修复它。有什么帮助吗?
答案 0 :(得分:3)
这个更短,更pythonic:
with open('A.out') as fin, open('B.out', 'w') as fout:
for line in fin:
if line.strip() == 'CURRENT VALUE OF GEOMETRY':
break
for line in fin:
if line.strip():
fout.write(line)
建议在打开文件时使用with
语句。
这创造了一个所谓的背景。只要您感到高兴,即离开上下文,文件就会自动关闭。
在这里,我使用一个with
语句打开源文件和目标文件。
两人都将在离开背景时关闭。
文件对象是一个迭代器,允许使用for
循环直接迭代。
使用line.strip()
删除任何前导和尾随空格。
只要您在清理的广告系列上看到CURRENT VALUE OF GEOMETRY
,就会切换到其他模式并开始将所有非空行从A.out
复制到B.out
。
答案 1 :(得分:0)
你将lfinish设置为None,然后尝试对它进行算术运算,这不起作用。
一种可能的解决方案是:
def from_A_to_B (Aout, Bout):
filein=open(Aout, "r")
fileout=open(Bout, "w")
lines = filein.readlines()
found = False
for line in lines:
if not found and "CURRENT VALUE OF GEOMETRY" in line:
found = True
elif found:
fileout.write(line)
fileout.close()
filein.close()