删除所有内容,直到python

时间:2018-01-22 14:45:03

标签: python

我需要读取文件并删除所有内容,直到出现某个字符串。这是简单的,我编写了代码,但它不起作用。它返回文件的全部内容。

我的输入文件:

/****************************************************************
*
*  Function Name:     ab
*  Input Parameter:   cd
*  output Parameter:  ef
*  Return Value:      hi
*
****************************************************************/

#include "file_a.h"
#include "file_b.h"

static inline function(int a, int b){
...
...
...
...
}

我必须删除所有内容,直到:

static inline function(int a, int b){

这样该语句将成为新文件中的第一行。

我的代码

TAG =  'static'

def delete_until(fileName,outfile):
    tag_found = False
    with open ('output.txt',"w") as out:
        with open(fileName,'r') as f:

            for line in f:
                if not tag_found:
                    if line.strip() == TAG:
                        tag_found = True
                    else:
                        out.write(line)

if __name__ == '__main__':
    fileName =  'myfile.txt'
    outfile = 'output.txt'
    delete_until(fileName,outfile)

新文件再次包含了整个内容。我做错了什么?

4 个答案:

答案 0 :(得分:2)

如果您正在分析代码文件,它们通常小到可以加载到内存中。此时,单个string.find调用应该执行此操作。

with open(fileName,'r') as fin, open('output.txt',"w") as fout:
    text = fin.read()
    i = text.find('static')
    if i > -1:
        fout.write(text[i:])

这写道:

static inline function(int a, int b){
...
...
...
...
}

output.txt

如果{em>实际 static函数之前的注释中出现static,并且假设您正在分析的代码文件是由理智的人写的,那么可以检查关键字前面的换行符。唯一的变化是:

i = text.find('\nstatic') 
if i > -1:
    fout.write(text[i + 1:])

Credit to JFF

答案 1 :(得分:0)

使用sed

$ sed '1,/static inline function(int a, int b){/d' < your-file.c

答案 2 :(得分:0)

由于此测试,您的代码失败了:

if line.strip() == TAG:

您以这种方式定义了TAG的内容:

TAG =  'static'

但您刚刚阅读的内容是:

'static inline function(int a, int b){'

这意味着您无法仅使用==运算符进行比较。根据您的要求,更改TAG的值以匹配您正在搜索的内容(这是最明智的做法,因为评论中的static也会匹配),或者改变你寻找那个字符串的方式。

答案 3 :(得分:0)

def delete_until(fileName,outfile):
    tag_found = False
    with open ('output.txt',"w") as out:
        with open(fileName,'r') as f:

            for line in f:
                if not tag_found:
                    if TAG in line:
                        tag_found = True
                if tag_found:
                    out.write(line)