2017-01-21 9 views
0

pythonのprint文を使用して端末に破損データを印刷しています。私はcsvファイルからデータを読み込み、ターミナルでそれを印刷するとき最初に、1000行を超えるがある TypeError:+ =: 'int'と 'list'のサポートされていないオペランドタイプpython

[' 122 32 5 0.112'] 
[' 122 42 5 0.153'] 
[' 122 23 5 0.153'] 
[' 122 24 2 0.156'] 

ように見えますし、私は彼らがカウントしたいが、私はcountコマンドを使用する場合、それは私にエラーを与えます。ことができます私のコードは、私がこのデータ

[ '122' , '32' , '5' , '0.112'] 
[ '122' , '42' , '5' , '0.153'] 
[ '122' , '23' , '5' , '0.153'] 
[ '122' , '24' , '2' , '0.156'] 

私はこれらの障害のある行をカウントしたいと私はみてくださいカウントまし障害のあるラインを印刷した後

with open('file-name', 'rb') as f: 
     lines = f.readlines() 
     print lines 
    count = 0  
    for k, line in enumerate(lines): 
     if k >= (int(start-header-lines)): 
      data = line.split() 
      if len(data) != 3: 
       print 'faulty-data', data 
       count += data 
       continue 

ですが、私は

TypeError: unsupported operand type(s) for +=: 'int' and 'list' 

このエラーが出ます誰かが私に、どのくらいの行が壊れているかを知っていて、それらを印刷していることを知っているので、それらの欠陥のある行を数える方法を教えてください。私は新しいので、多分私の質問はばかげているようです。 ありがとうございます。

+0

あなたのコードが不完全です。 'data_tmp'は定義されていません。私の推測では、エラーは 'カウント+ = data_tmp'(私はあなたが完全なトレースバックを与えていたことが確信できる)arroungですが、私は確信することはできません。 –

+0

@Rightleg申し訳ありません、タイプミスです。それはデータであり、data_tmpではありませんでした。 – rob

+0

@Rightleg私はSO以上で検索しますが、それらの解決策は異なり、私の場合を満たせませんでした。 – rob

答えて

0

splitメソッドはリストを返します。そのため、以下のリストとしてdataを宣言します。一方

data = line.split() 

countは整数として定義されます。

count = 0 

はしかし、あなたはcountdataを追加しようとしている。

count += data 

整数にリストを追加することは論理的には意味がありません。これは基本的にはエラーが表示される内容です。

これは、行を数えたいと思うようです。したがって、ちょうど増分count。あなたのコードは次のようになります。

with open('file-name', 'rb') as f: 
     lines = f.readlines() 
     print lines 
    count = 0  
    for k, line in enumerate(lines): 
     if k >= (int(start-header-lines)): 
      data = line.split() 
      if len(data) != 3: 
       print 'faulty-data', data 
       count += 1 # Increment count for each faulty line 
       continue 

があなたのコメントにここに答える:あなたはいくつかのファイルの上に欠陥のある行の合計数を数えることができる方法を求めています。

解決策はかなり簡単です:前のコードをパラメータでファイルを受け取る関数に入れます。

def count_faulty_lines(path): 
    with open(path, 'rb') as f: # The first parameter of open is the path 
      lines = f.readlines() 
      print lines 
     count = 0  
     for k, line in enumerate(lines): 
      if k >= (int(start-header-lines)): 
       data = line.split() 
       if len(data) != 3: 
        print 'faulty-data', data 
        count += 1 
        continue 
    return count 

次に対象ファイルに対して、この関数の結果を合計:

paths = ('file1.txt', 'file2.txt', ...) 
sum(count_faulty_lines(path) for path in paths) 
+0

thanxはい、私は行だけを数えたいと思います。私はこの解決法を適用し、すぐに戻ってくるでしょう。 – rob

+0

私はあなたの答えを受け入れています。なぜなら、少し質問があります。私は3つのファイルを持っていたし、それぞれのファイルのための欠陥のある行を数え、そしてそれは再び始まります。どのようにして、すべてのファイルの欠陥のある行をまとめてまとめることができますか? .thanx forrの助け。 – rob

+0

@rob私は私の答えを編集しました。 –

関連する問題