从Python中没有特定单词的文件中删除一行

时间:2017-12-27 12:40:55

标签: python regex linux file replace

用Python编程,

删除以<div开头并以>结尾但在其间没有字text-align的行。

输入:

<div>
<div><div>
<div style="text-align: center;">
<div kjgueberhfui;hh;ah>
<div kjfh fhefhufh  fhueshf >
<strong>PANKY</strong>
<div style="text-align: left;">

输出:

<div style="text-align: center;">
<strong>PANKY</strong>
<div style="text-align: left;">

我正在寻找类似的东西:

f1 = open('input.txt','r')
filedata = f1.read()
filedata = re.sub("<div[^>]*/^((?!text-align).)*$/[^>]*>","",filedata)

OR

f1 = open('input.txt','r')
for line in f1:
    if "<div" in line:
        if "text-align" in line;
        else:
            f1.write(line.replace(THIS_LINE,"")

以上2个代码无效或不完整!

5 个答案:

答案 0 :(得分:2)

f1 = open('input.txt','r')
for line in f1:
    if "<div" in line:
        if "text-align" in line;
        else:
            f1.write(line.replace(THIS_LINE,"")

在if之后没有声明,因此它无法正常工作。此外,您可以结合两个条件:

with open('input.txt','r') as f1, open('output.txt', 'w') as f_out:
    for line in f1:
        if not ("<div" in line and "text-align" not in line):
            f2.write(line)

答案 1 :(得分:2)

您可以使用字符串的startswith和endswith函数。

    if line.startswith('<div') & line.endswith('>') & ('text-align' not in line):
        #do something

答案 2 :(得分:1)

谢谢大家, 因为你们所有我能够找到答案,

你的一些代码输出与我要求的相反,但这里的代码是我的答案的解决方案,

f1 = open('input.txt','r')
f2 = open('output.txt','w')

for line in f1:
    if "<div" in line and "text-align" in line:
        f2.write(line)
    if "<div" not in line:
        f2.write(line)

f1.close()
f2.close()

答案 3 :(得分:0)

对这个问题的更正确和完整的答案是这样的:

lines = open("input.txt").read().splitlines()

with open("input.txt", "w") as file:
    for line in lines:
        if not (line.startswith("<div") and "text-align" not in line and line.endswith(">")):
            file.write(line + "\n")

这会从input.txt

中删除所有不需要的行

答案 4 :(得分:0)

我希望这会对你有所帮助:

with open('input.txt','rb+') as f1:    
    for div in f1:
          if 'text-align' in div or '<div' not in div:
                print(div)