删除带有非数字数据的行,并使用Python在特定文本格式之前插入文本

时间:2015-03-27 08:40:41

标签: python text

我有一个包含数千行格式的文件

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的任何建议?

1 个答案:

答案 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')  

我没有修改读取行,因此输出文件应该具有精确的格式作为输入文件。