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()。これにより、行の末尾から文字が削除され、期待どおりに分割できます。

エラー(2番目のブロック内)はこれから発生します:

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 に答える