Python中strip()函数出现错误

3
在我的下面脚本中
def main():
    file= open("NCSIDS_ObsExp.txt", "r")
    for line in file:
        line= line.split(',')
        print line
    file.close()
main()

I get:

['Ashe', '1853282.679', '1673876.66', '1 ', '2 \n']
['Alleghany', '1963178.059', '1695301.229', '0 ', '1 \n']

我应该如何去掉\n?我对strip()函数非常困惑,我一直在收到错误信息。

def main():
    file= open("NCSIDS_ObsExp.txt", "r")
    for line in file:
        line= line.split(',')
        append= line.strip('n')
        print line
    file.close()
main()

将来,您可能希望包含特定的错误消息,以便更轻松地解决问题。 - Darian Lewin
1个回答

5
尝试使用line.strip().split(','),它可以在迭代过程中除去\n。同时,尽可能使用with打开文件更好。这是一个上下文管理器,确保当您退出缩进块时文件被正确关闭:
In [1]: with open('test.txt', 'rb') as f:
   ...:     for line in f:
   ...:         print line.strip().split(',')
   ...:         
   ...:         
['one']
['two', ' three']
['four', 'five', 'six']

问题在于当你读取一行时,\n字符被解释为该行的一部分,当你使用split函数进行分割时,它会将最后一项中的换行符也一并提取出来:
In [2]: with open('test.txt', 'rb') as f:
   ...:     for line in f:
   ...:         print line.split(',')
   ...:         
   ...:                
['one\n']
['two', ' three\n']
['four', 'five', 'six\n']

因此,为了去掉它,你可以在该行上运行strip(),这将从该行的末尾删除字符,让你按预期进行分割。
第二个块中的错误来自于这个:
line= line.split(',')
append= line.strip('n')

您正在逗号上分割行,这将返回一个列表。但是您随后尝试去除该列表,这将导致AttributeError,因为列表没有strip方法。此外,\n是一个特殊字符,表示换行,因此仅剥离n将不会产生您想要的效果 - 您需要剥离整个\n字符。如果您尝试打印包含该字符的字符串,则可以看到其“特殊”性质。
In [1]: s = 'A\nnew\nline'

In [2]: s
Out[2]: 'A\nnew\nline'

In [3]: print s
A
new
line

In [4]: s.strip('n')
Out[4]: 'A\nnew\nline'

1
还要注意,line.strip('n') 是不正确的。你可能想要使用 line.strip('\n')。 - vkontori
@vkontori 真的,会更明确地指出这一点。 - RocketDonkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接