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

Python删除空字符串和strip()不起作用,python,file,strip,Python,File,Strip,我在Python3.8.0中工作,我想删除以小写字母开头的字符串。它确实有效,但那些字符串是空的,而那些空字符串我无法删除。我试着剥去它,它是有效的,但不适用于空字符串。 下面是我的代码 gezegdes_file = open(gezegdes_betekenis, 'r') content = gezegdes_file.readlines() gezegdes_file.close() gezegdes_opgeschoond = open('gezegdes_opgeschoond.tx

我在Python3.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()
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
我已尝试用空字符串替换rule.lower,但无法删除空字符串。 以下代码的结果

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()
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语句检查会更安全。我选择向下移动它。在这种情况下,如果规则不是空的,我们将打印并写入它

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()

为什么不在打印或写入之前检查字符串是否为空?在对规则进行所有修改之后,应该检查if。否则,您可能仍然会发出一个空字符串。@khelwood这是一个非常正确的观点:我会做出调整。