1

こんにちは、列 [3] と [4] の行 180 の情報を抽出しようとしています。私が直面している問題は

  1. 要素は 3 つのスペースで区切られます
  2. @@Data は行 180 から始まります
  3. 私が使用しているコードは、特定の列を抽出できません
  4. エラーが表示されます: line = reader[180][3] IndexError: リスト インデックスが範囲外です

    @@Data: Source 0 in text format:        
    1    2    2    1    1    9    1    1    -2    2    1    -3    3    1 
    3    2    2    1    1    9    1    1    -2    2    1    -3    3    1 
    4    2    2    1    1    9    1    1    -1    1    1    -2    2    1 
    

私が使用しているコード

     reader = list(csv.reader(f, delimiter=' '))
     SatIP, CoerIP = getSatHcoer(reader)
     print SatIP, CoerIP

     def getSatHcoer(reader): 
     line = reader[180][3]
     Sat = line.split('    ')
     Sat =  Sat[len(Sat)-1]
     line = reader[180][4]
     Coer = line.split('     ')
     Coer =  Coer[len(Coer)-1] 
     return Sat, Coer
     pass
4

2 に答える 2

1

私があなたの質問を正しく理解していれば、フィールドが3 つのスペースで区切られているため、フィールドを分割するのに問題があります。実際に正規表現で分割できます。次を使用してみてください。

 Coer = line.split("\s+")

\s空白 (タブ、スペース、改行、およびバックスペース?) を表す正規表現クラスは +、前のパターンを1 回以上適用することを意味するため、この式は 1 つ以上のスペース文字に一致します。この方法を使用すると、フィールドがいくつのスペースで区切られていてもかまいません。

編集 以下で説明するように、これは re をインポートして re.split を使用する場合にのみ機能します。

 import re
 Coer = re.split("\s+",line)
于 2013-10-09T02:28:53.743 に答える
0

Python のインデックス作成は 0 から始まることに注意してください。180 行目は、ファイルの 181 行目を意味し、3 列目と 4 列目はファイルの 4 列目と 5 列目であると想定しています。そうでない場合は、それらの数値から -1 します。

def getSatHcoer(reader):
    Sat = reader[180][3]
    Coer = reader[180][4]
    return Sat, Coer

with open('file.txt', 'r') as f:
    reader = [[x.strip().split('   ')] for x in f]
SatIP, CoerIP = getSatHcoer(reader)
print SatIP, CoerIP
于 2013-10-09T02:34:11.583 に答える