python - Python删除空字符串和strip()不起作用
问题描述
我在 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()
推荐阅读
- echarts - echarts sunburst 虚拟根节点行为
- git - 无法通过 Java 插件 hudson.plugins.git 从邻居 gogs 容器中签出詹金斯
- css - 如何在离子中的div的背景上制作半圈?
- asp.net - 带有 Html 元素的 ASP.NET Tag Helper
- ios - GKAgent 不会更新在 ARKit/SCNScene/GamplayKit 游戏中注册为团队实体的 SCNNode 的位置
- apache-nifi - 如何使用 NiFi 获取 Blob 文件?
- google-cloud-platform - BigQuery 有新数据时触发云函数
- python - sklearn 的 linear_model.predict 上的 ValueError
- apache-spark - catch exceptionorg.apache.spark.SparkException:作业因阶段失败而中止
- ios - 游戏中心在 iPhone 模拟器中工作,但不是 iPad - Swift 4