我有一个包含数千行格式的文件
unwantedtext1
unwantedtext1
50779 1 52476 52475 52481 52485
50780 1 52485 52481 52480 52484
.....
.....
unwantedText2
50614 1.8837812e+001 7.0057003e+000 1.6900000e+002
52200 4.6960466e+001 -2.5497744e+000 1.4950614e+002
.....
.....
unwantedtext3
unwantedtext3
在下一步中,当字段2变为实数而不是整数时,我必须在文件的开头添加文本wantedText1和wantedText2。所以输出将是
wantedtext1
wantedtext1
50779 1 52476 52475 52481 52485
50780 1 52485 52481 52480 52484
.....
.....
wantedText2
50614 1.8837812e+001 7.0057003e+000 1.6900000e+002
52200 4.6960466e+001 -2.5497744e+000 1.4950614e+002
.....
.....
wantedtext3
wantedtext3
这些想要的文本可以直接回显,也可以从其他文本输入。数据以空格分隔,而不是制表符分隔。
使用python的任何建议?
答案 0 :(得分:1)
设置一个标志,以反映我们是否看到了实数。
seen_real_number = False
with open('file_name') as in_file, open('output.txt','w') as out_file:
out_file.write('wantedtext1\nwantedtext1\n')
for line in in_file:
if not line.strip():
out_file.write(line)
continue
fields = line.split()
如果该行只有一个字段或第一个字段是非数字,则跳过该行。
if len(fields) == 1 or not fields[0].isdigit():
out_file.write(line)
continue
这里,该行有多个字段,第一个字段是数字。为了检查第二个字段是否是实数,我调用int
,如果第二个字段是实数,它将抛出异常。
try:
int(fields[1])
except ValueError:
在这里,我们看到了一个实数。切换seen_real_number
并编写' wantedtext2'。
if not seen_real_number:
out_file.write('wantedtext2\n')
seen_real_number = True
out_file.write(line)
else:
现在没有异常,第二个字段是非真实的。切换seen_real_number
标志。因为如果我们再次遇到一个真实的数字,我们可以写出'wanttext2'再次。
if seen_real_number:
seen_real_number = False
out_file.write(line)
out_file.write('wantedtext3\nwantedtext3\n')
我没有修改读取行,因此输出文件应该具有精确的格式作为输入文件。