我坚持这样:
当第二个文件中找到'/ MAT / LAW02 / 1'并将其写入时,我想从文件中抓取将来的12行。
之后,我希望它继续进行分析,直到最后。
但是我被困住了,因为我永远找不到关于这个问题的话题。
这是我当前的代码:
inputRadFile = "demo/textA.txt"
outputRadFile = "demo/textB.txt"
with open(outputRadFile, "w") as textFileClean:
with open(inputRadFile, "r") as textFile:
for i, line in enumerate(textFile):
if '/MAT/LAW02/1' in line:
catchInfo = line.strip().split()
toString = ''.join(catchInfo)
textFileClean.write(toString)
textFile.close()
textFileClean.close()
这是我要提取的textA文件的一部分(因为textA文件有200,000行):
/MAT/LAW02/1
ES_ODG2_MED-5
# RHO| REF. RHO|
7.82E-9
# E| v|
210000. 0.3
# a| b| n| emax| smax|
273.1 437.6 0.724 1.E30 1.E30
# c| e0| ICC| Fsmooth| Fcut| Chard|
0.097 0.32 1 0 1.E30
# m| Tmelt| rho0Cp| Ti|
0. 0. 0. 298.
这是运行上述代码后的我的textB文件:
/MAT/LAW02/1
我想到了这样的事情:
from itertools import islice
inputRadFile = "demo/textA.txt"
outputRadFile = "demo/textB.txt"
with open(outputRadFile, "w") as textFileClean:
with open(inputRadFile, "r") as textFile:
it = iter(enumerate(textFile))
for i, line in it:
x = 0
y = 12
if '/MAT/LAW02/1' in line:
while x != y:
catchInfo = line.strip().split()
toString = ''.join(catchInfo)
textFileClean.write(toString)
place_where_skip_happened = i
next(islice(it, 1, 1), None)
x += 1
textFile.close()
textFileClean.close()
我想从1乘1到12。
我受到这个主题的启发:跳过枚举列表对象(python)中的迭代
但这对我不起作用。
这是运行此代码后的textB文件:
/MAT/LAW02/1/MAT/LAW02/1/MAT/LAW02/1/MAT/LAW02/1/MAT/LAW02/1/MAT/LAW02/1/MAT/LAW02/1/MAT/LAW02/1/MAT/LAW02/1/MAT/LAW02/1/MAT/LAW02/1/MAT/LAW02/1
分隔符目前不是问题(我知道该怎么做)。
最后,我想要像textA的代码片段一样的textB。
有人可以帮助我吗?
也许保留原始循环,但为12行添加一个计数器,并在if
该行具有匹配项或计数器非零的情况下允许该块执行:
with open(outputRadFile, "w") as textFileClean:
with open(inputRadFile, "r") as textFile:
counter = 0
for i, line in enumerate(textFile):
if '/MAT/LAW02/1' in line:
counter = 13 # the line itself plus the 12 that follow
if counter > 0:
counter -= 1
catchInfo = line.strip().split()
toString = ''.join(catchInfo)
textFileClean.write(toString)
当几行(少于12行)中出现两次匹配时,这也将更好地工作。在第二个匹配项之后,这会将输出扩展到12行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句