删除所有内容,直到python中的某个字符串或字符

2024-04-18 07:41:55 发布

您现在位置: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)

新文件再次包含了全部内容。我做错了什么?你知道吗


Tags: 文件代码txt内容outputifparametertag
3条回答

使用^{}

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

如果你在分析代码文件,它们通常足够小,可以载入内存。此时,一个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。你知道吗


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

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

Credit to JFF。你知道吗

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

if line.strip() == TAG:

您这样定义TAG的内容:

TAG =  'static'

但你刚才读到的一句话是:

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

这意味着不能仅使用==运算符进行比较。根据您的需求,可以更改TAG的值以匹配您正在搜索的内容(这是最明智的做法,因为注释中的static也会匹配),或者更改查找该字符串的方式。你知道吗

相关问题 更多 >