从Python字符串中删除前导+尾随空格和换行符,.strip()无法正常工作?

问题描述 投票:-1回答:2

我目前正在第二门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:thirdchar(rprlrhya.txt)返回了mylgcwdnbi

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

似乎换行符正在通过我的.strip()潜入,但我不确定如何删除它们。我以为.strip()会删除\n,并且我已经尝试了从.rstrip()fifthstring.join(fifthstring.split())的所有操作,并在剥离循环中的第五字符串和x时具有冗余性。这些换行符如何通过?

python string removing-whitespace
2个回答
0
投票

您的解决方案未考虑以下几点:

  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)

0
投票

这应该起作用:

def fifthchar(filename):
    with open(filename) as fin :
        return ''.join( line.strip()[4] if len(line.strip()) > 4 else '' for line in fin.readlines() )
© www.soinside.com 2019 - 2024. All rights reserved.