【问题标题】:Removing Empty Strings from Text File (Not Lists) in Python 3在 Python 3 中从文本文件(非列表)中删除空字符串
【发布时间】:2021-04-15 18:30:15
【问题描述】:

Sample Text 1 是我尝试格式化的一些文本的摘录输出(不允许我直接以原始格式粘贴或附加 img)。输出由以下内容生成:

fhandle = open('legalcode.txt')
for line in fhandle:
    line = line.strip()
    print(repr(line))

hold = input()

我的输出的第 2 行只是空的,看起来我也得到了空字符串?我正在寻找关于第 2 行空白区域的说明以及有关删除空字符串的建议。当前所有搜索结果仅讨论从列表中删除字符串。

提前感谢您的帮助。

编辑 1

如上所述,我已使用以下方法删除“ ”:

fhandle = open('legalcode.txt')
for line in fhandle:
    line = line.strip()
    line = line.strip('\r')
    if line == '':
        continue
    print(repr(line))

但正如您在Sample Text 2 中看到的那样,倒数第三行仍有一个无法识别的空格。有没有其他显示隐藏字符的方法?

编辑 2

我正在使用的文本文件:https://github.com/Achulhu/Legal-Code-Reformat

原文可见:https://www.ilga.gov/legislation/ilcs/ilcs5.asp?ActID=3992&ChapterID=35

编辑 3

我将@Arseniy 对 [ord] 的建议与当前运行情况进行了整合:

fhandle = open('legalcode.txt','r')
for line in fhandle:
    line = line.strip()
    line = line.strip('\r')
    if line == '':
        continue
    print(repr(line),[ord(c) for c in line])

但是,[ord] 没有为该空间提供标识 (Sample Text 3)。为了澄清起见,我使用的是 Windows 操作系统并从命令提示符中调用它。它是用 ATOM 编写的,我也尝试通过 IDLE 运行它,看看是否有什么不同。

【问题讨论】:

  • 引号在那里是因为您使用了repr(),它专门在字符串周围加上引号。如果您不想要这种行为,为什么还要使用 repr()
  • Repr() 仅用于向我展示那里的内容。这些空间无论如何都存在。
  • 在这些情况下,line 是一个空字符串,因为文件有一个空行。你想从实际文件中删除空白行,还是在循环中跳过打印它们?
  • 最终,我会将它们删除,但现在我只是想了解输出的第 2 行和第 4 行之间的区别。我添加了: *** if line == ' ': continue *** 这解决了第 4 行,但它不能解决示例文本的第 2 行。 :(
  • 第一行看起来像是被截断了——它以双引号结尾,但不是以双引号开头。此外,第二行根本没有引号,这与repr() 不一致。你确定截图准确吗?

标签: python editor


【解决方案1】:

试试这个:)

fhandle = open('legalcode.txt')
for line in fhandle:
    if not line.strip():
        continue
    print(line.strip())

或者

fhandle = open('legalcode.txt')
lines=[l.strip() for l in fhandle.readlines() if l.strip()]

for l in lines: 
   print(l)

【讨论】:

  • 仍然有空行。 :(
  • 在编辑后也尝试了第二个选项,问题仍然存在。
  • 嗯。我在您的示例中检查了此代码)我认为,在您的平台(m.b. windows?)上,某些字符没有被 strip 方法删除。让我们用这段代码检查一下 ``` fhandle = open('legalcode.txt') for line in fhandle: if line.strip(): continue print([ord(c) for c in line]) ``` 这段代码将打印一个表示剩余符号的整数。
  • 我刚刚根据您的建议更新了原始帖子。我自己运行了您的 [ord] 代码,它返回时没有空格,但是当一起运行时,它仍然显示空格但没有与空格的关联...
【解决方案2】:

简单地说:

fhandle = open('legalcode.txt')
for line in fhandle:
    line = line.replace('\n', '').replace('\r', '')
    line = line.strip()
    print(repr(line))

hold = input()

【讨论】:

  • 是的,我刚刚在原始帖子中添加了一个 GitHub 链接。如果您在访问时遇到任何问题,请告诉我,因为我以前从未使用过 GH。
猜你喜欢
  • 2017-08-23
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 2021-01-23
  • 2023-04-09
相关资源
最近更新 更多