Python 删除空字符串并且 strip() 不起作用

Python remove empty string and strip() doesn't work

我在 Python 3.8.0 工作,我想删除以小写字母开头的字符串,它确实有效,只有那些字符串是空的,而那些我无法删除的空字符串。我试图剥离它,它有效,但不适用于空字符串。 我的代码如下

gezegdes_file = open(gezegdes_betekenis, 'r')
content = gezegdes_file.readlines()
gezegdes_file.close()
gezegdes_opgeschoond = open('gezegdes_opgeschoond.txt', 'w')
for rule in content:
    rule = rule.replace(rule.lower(), ' ').strip()
    # rule = "".join([s for s in rule.strip().splitlines(True) if s.strip("\r\n")])
    rule = rule.replace('ij', 'y')
    # rule = rule.replace('\n\n','\n').replace('\n\n','\n')
    rule = rule.replace('.', '').replace('!', '').replace('?', '').upper()
    print(rule)
    gezegdes_opgeschoond.write(str(rule) + '\n')
gezegdes_opgeschoond.close()

我尝试用空字符串替换 rule.lower 并且有效,但我无法删除空字符串。 以下代码的结果

AAN DE RAND VAN HET RAVYN BLOEIEN DE MOOISTE BLOEMEN
AAN DE VEREN KENT MEN DE VOGEL
AAN DE VRUCHTEN KENT MEN DE BOOM
AAP WAT HEB JE MOOIE JONGEN
ACHTER DE WOLKEN SCHYNT DE ZON
AL DOENDE LEERT MEN
AL IS DE LEUGEN NOG ZO SNEL, DE WAARHEID ACHTERHAALT HAAR WEL
ALLE GEKHEID OP EEN STOKJE
ALLE HENS AAN DEK
ALLE HOUT IS GEEN TIMMERHOUT
ALLE WEGEN LEIDEN NAAR ROME

ALS APEN HOGER KLIMMEN WILLEN, ZIET MEN GAUW HUN BLOTE BILLEN

并且最后两句之间有一条白线,最后两行之间有一个以小写字母开头的字符串,所有以小写字母开头的字符串都必须删除。 文件很长,文件中有好几行像这样的空行,因为我必须删除以小写字母开头的字符串。 删除最后两个句子之间的白线的解决方案是什么?

一种方法是简单地跳过一个空行开始,这样你就可以像这样缩短你的循环:

gezegdes_file = open(gezegdes_betekenis, 'r')
content = gezegdes_file.readlines()
gezegdes_file.close()
gezegdes_opgeschoond = open('gezegdes_opgeschoond.txt', 'w')
for rule in content:
    if not rule:  # if it's an empty string, skip everything
        continue
    rule = rule.replace(rule.lower(), ' ').strip()
    # rule = "".join([s for s in rule.strip().splitlines(True) if s.strip("\r\n")])
    rule = rule.replace('ij', 'y')
    # rule = rule.replace('\n\n','\n').replace('\n\n','\n')
    rule = rule.replace('.', '').replace('!', '').replace('?', '').upper()
    print(rule)
    gezegdes_opgeschoond.write(str(rule) + '\n')
gezegdes_opgeschoond.close()

如果您的测试线与rule == ''略有不同,可以调整测试线,但这应该会给您一个想法。

编辑

正如@khelwood 所表明的那样,在所有这些替换都是 运行 之后,我们可能会得到一个空行,因此移动 if 会更安全在替换块的末尾(或附加)检查语句。我选择将其下移。这样的话,如果rule不为空,我们就打印写入

gezegdes_file = open(gezegdes_betekenis, 'r')
content = gezegdes_file.readlines()
gezegdes_file.close()
gezegdes_opgeschoond = open('gezegdes_opgeschoond.txt', 'w')
for rule in content:
    rule = rule.replace(rule.lower(), ' ').strip()
    # rule = "".join([s for s in rule.strip().splitlines(True) if s.strip("\r\n")])
    rule = rule.replace('ij', 'y')
    # rule = rule.replace('\n\n','\n').replace('\n\n','\n')
    rule = rule.replace('.', '').replace('!', '').replace('?', '').upper()

    if rule:  # if it's not an empty string, then print/write
        print(rule)
        gezegdes_opgeschoond.write(str(rule) + '\n')
gezegdes_opgeschoond.close()