1

このコードの6行目では、「IndexError:文字列インデックスが範囲外です」が生成されます。「ifline[6]!= None」と聞くと、その行に内容がないのではないかと思いますが、その理由がわかりません。私も!=''を使ってみましたが、問題はその前にあります。

import csv
dict1={} 
list1 = csv.reader(open('014850_D_AA_20070207.txt'), delimiter='\t')
list1.next()    # skips the headers
for line in list1:
    if line[6] != None:
        dict1[line[0]]= (line[6] + ", " + line[11])
    else:
        continue    
print dict1
4

4 に答える 4

2
  1. Python のインデックスは 0 から始まるためline[6]、 の 7 番目の要素にアクセスしlineます。この場合、 にlineは 7 つの要素がないため、失敗します。

  2. if line[6] != None行にコンテンツがないかどうかを確認する正しい方法ではありません。if len(line) < 7代わりに使用してください。

  3. csv.DictReaderヘッダー行を含む CSV ファイルを読み取るためのはるかに優れたインターフェイスです。それを反復すると、対応するヘッダー項目をキーとして持つ辞書として行が得られるため、コードがはるかに理解しやすくなります (マジック インデックスを使用する場合と比較して)。

于 2012-10-16T04:49:17.997 に答える
0

それを避けるには、それを「try」ブロックに入れて、たとえば string.find() を使用します

[-1] は、文字列の最後の文字を取得するためのものです

のようなものも

else:
 continue

異常です

私は言うのをほとんど忘れていました: if string[5] != None: もちろん indexerror を発生させます。

于 2012-10-16T06:20:25.887 に答える
0

6 行目を次のように置き換えてみてください。

if len(line) > 6:

でも多分

if len(line) > 11:

以下の行[11]を使用しているため、より優れています。

line[6] が == to None であることをテストすると、すでに line の 7 番目の要素にアクセスしようとしています。行に含まれる文字が 7 文字未満の場合、インデックス エラーが発生します。

于 2012-10-16T06:09:58.470 に答える
0

役立つアイデアをありがとう。以下のように csv.DictReader を使用して問題を解決できました。

import csv
dictPI = {}
dictGS = {}
fh = open('014850_D_AA_20070207.txt')
for line in csv.DictReader(fh, delimiter='\t'):
    ProbeID = line['ProbeID']
    GeneSymbol = line['GeneSymbol']
    Description = line['Description']
    if GeneSymbol != '':
        dictPI[ProbeID] = GeneSymbol, Description
        dictGS.setdefault(GeneSymbol, []).append(ProbeID)
于 2012-10-17T17:05:06.620 に答える