我需要读取文件并删除所有内容,直到出现某个字符串。这是简单的,我编写了代码,但它不起作用。它返回文件的全部内容。
我的输入文件:
/****************************************************************
*
* 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)
新文件再次包含了整个内容。我做错了什么?
答案 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:])
答案 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)