【问题标题】:Removing leading + trailing whitespace and newlines from a Python string, .strip() not working?从 Python 字符串中删除前导 + 尾随空格和换行符,.strip() 不起作用?
【发布时间】:2020-01-16 11:25:21
【问题描述】:

我目前正在上我的第二门 Python 课程,在我们的复习热身活动中,我被一个看似简单的问题难住了。它是这样表述的:

在本练习中,您的函数将接收 1 个参数,即文本文件的名称。该函数将返回通过将每行的第五个字符连接成一个字符串而创建的字符串。如果该行少于 5 个字符,则应跳过该行。在查找第五个字符之前,所有行都应删除前导和尾随空格。

CodeGrinder 然后根据随机生成的 .txt 文件对其进行评分。这是我目前拥有的代码:

def fifthchar(filename):
    file = open(filename)
    fifthstring = ''
    for x in file:
        x.strip('\n ')
        if len(x) >= 5:
            fifthstring += x[4]
        else:
            pass
    fifthstring.strip('\n ')
    return fifthstring

并返回错误:

AssertionError: False is not true : Fifthchar(rprlrhya.txt) 返回了 mylgcwdnbi

dmou。它应该返回 mylgcwdnbidmou。检查您的逻辑,然后重试。

似乎换行符正在通过我的.strip() 潜入,我不知道如何删除它们。我认为.strip() 会删除\n,并且我已经尝试了从.rstrip()fifthstring.join(fifthstring.split()) 的所有方法,以在循环中剥离fifthstring 和x 时具有冗余。这些换行符是如何通过的?

【问题讨论】:

  • 你在剥离/n,我认为你的意思是\n :)
  • 我在发布之前在我的代码中更正了它,但仍然出现错误,但修复了帖子中的错字。同样的问题仍然存在,但感谢您的帮助!

标签: python string removing-whitespace


【解决方案1】:

您的解决方案没有考虑几件事:

  1. 第五个字符是“\n”字符的空行。
  2. 应删除每行的前导和尾随空格。
  3. strip() 不会改变 x,您需要重新分配剥离后的字符串。

这是您的解决方案:

def fifthchar(filename):
    file = open(filename)
    fifthstring = ''
    for x in file:
        x = x.strip()
        if len(x) >= 5:
            fifthstring += x[4]
        else:
            pass
    fifthstring.strip('\n ')
    return fifthstring

这是另一个:

def fifth(filename):
    with open(filename) as f:
        string = '' 
        for line in f.readlines():
            l = line.strip()
            string += l[4] if len(l) >= 5 else ''
        return ''.join(string)

和之前使用列表推导一样:

def fifth(filename):
    with open(filename) as f:
        string = [line.strip()[4] if len(line.strip()) >= 5 else '' for line in f.readlines()]
        return ''.join(string)

【讨论】:

    【解决方案2】:

    这应该可行:

    def fifthchar(filename):
        with open(filename) as fin :
            return ''.join( line.strip()[4] if len(line.strip()) > 4 else '' for line in fin.readlines() )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      相关资源
      最近更新 更多