3

在我下面的脚本中

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

我得到:

['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()
4

1 回答 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字符。如果您尝试print使用包含该字符的字符串,您可以看到它的“特殊”性质:

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'
于 2012-12-19T23:42:31.697 回答