Python / IPythonの奇妙な再現不可能なリストインデックスが範囲外エラー

axrtyn

私は最近、Pythonとそれを自分の仕事に適用する方法を学んでいます。いくつかのスクリプトを正常に作成しましたが、理解できない問題が発生しています。

1行に2つのタブ区切りの列がある、最大4000行のファイルを開いています。入力ファイルを読み取ると、リストインデックスが範囲外であるというインデックスエラーが発生します。ただし、毎回エラーが発生しますが、毎回同じ行で発生するわけではありません(のように、毎回異なる行でエラーがスローされます!)。したがって、何らかの理由で、それは一般的には機能しますが、その後(一見)ランダムに失敗します。

私は文字通り先週Pythonを学び始めたばかりなので、困惑しています。同じ問題を探しましたが、似たようなものは見つかりませんでした。さらに、これが言語固有の問題なのか、IPython固有の問題なのかわかりません。どんな助けでも大歓迎です!

input = open("count.txt", "r")
changelist = []
listtosort = []
second = str()

output = open("output.txt", "w")

for each in input:
    splits = each.split("\t")
    changelist = list(splits[0])
    second = int(splits[1])

print second

if changelist[7] == ";":   
    changelist.insert(6, "000")
    va = "".join(changelist) 
    var = va + ("\t") + str(second)
    listtosort.append(var)
    output.write(var)

elif changelist[8] == ";":   
    changelist.insert(6, "00")
    va = "".join(changelist) 
    var = va + ("\t") + str(second)
    listtosort.append(var)
    output.write(var)

elif changelist[9] == ";":   
    changelist.insert(6, "0")
    va = "".join(changelist) 
    var = va + ("\t") + str(second)
    listtosort.append(var)
    output.write(var)

else:
    #output.write(str("".join(changelist)))
    va = "".join(changelist)
    var = va + ("\t") + str(second)
    listtosort.append(var)
    output.write(var)

output.close()

エラー

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
/home/a/Desktop/sharedfolder/ipytest/individ.ins.count.test/<ipython-input-87-32f9b0a1951b> in <module>()
     57     splits = each.split("\t")
     58     changelist = list(splits[0])
---> 59     second = int(splits[1])
     60 
     61     print second

IndexError: list index out of range

入力:

ID=cds0;Name=NP_414542.1;Parent=gene0;Dbxref=ASAP:ABE-0000006,UniProtKB%2FSwiss-Prot:P0AD86,Genbank:NP_414542.1,EcoGene:EG11277,GeneID:944742;gbkey=CDS;product=thr 12
ID=cds1000;Name=NP_415538.1;Parent=gene1035;Dbxref=ASAP:ABE-0003451,UniProtKB%2FSwiss-Prot:P31545,Genbank:NP_415538.1,EcoGene:EG11735,GeneID:946500;gbkey=CDS;product=deferrrochelatase%2C  50
ID=cds1001;Name=NP_415539.1;Parent=gene1036;Note=PhoB-dependent%2C  36

必要な出力:

ID=cds0000;Name=NP_414542.1;Parent=gene0;Dbxref=ASAP:ABE-0000006,UniProtKB%2FSwiss-Prot:P0AD86,Genbank:NP_414542.1,EcoGene:EG11277,GeneID:944742;gbkey=CDS;product=thr  12
ID=cds1000;Name=NP_415538.1;Parent=gene1035;Dbxref=ASAP:ABE-0003451,UniProtKB%2FSwiss-Prot:P31545,Genbank:NP_415538.1,EcoGene:EG11735,GeneID:946500;gbkey=CDS;product=deferrrochelatase%2C  50
ID=cds1001;Name=NP_415539.1;Parent=gene1036;Note=PhoB-dependent%2C  36
msvalkon

を取得する理由IndexErrorは、入力ファイルが完全にタブ区切りではないように見えるためです。そのためsplits[1]、アクセスしようとしても何もありません

コードでリファクタリングを使用できます。まず、if-checksを繰り返しますが、これは不要です。これcds0は7文字にパディングするだけで、おそらくあなたが望むものではありません。コードをリファクタリングしてもう少しPythonicでドライにする方法を示すために、以下をまとめました。それがあなたのデータセットで機能することを保証することはできませんが、それがあなたが物事を違ったやり方で行う方法を理解するのに役立つことを願っています。

    to_sort = []
    # We can open two files using the with statement. This will also handle 
    # closing the files for us, when we exit the block.
    with open("count.txt", "r") as inp, open("output.txt", "w") as out:
        for each in inp:
           # Split at ';'... So you won't have to worry about whether or not
           # the file is tab delimited
           changed = each.split(";")

           # Get the value you want. This is called unpacking.
           # The value before '=' will always be 'ID', so we don't really care about it.
           # _ is generally used as a variable name when the value is discarded.
           _, value = changed[0].split("=")

           # 0-pad the desired value to 7 characters. Python string formatting
           # makes this very easy. This will replace the current value in the list.
           changed[0] = "ID={:0<7}".format(value)

           # Join the changed-list with the original separator and
           # and append it to the sort list.
           to_sort.append(";".join(changed))

       # Write the results to the file all at once. Your test data already
       # provided the newlines, you can just write it out as it is.
       output.writelines(to_sort)

       # Do what else you need to do. Maybe to_list.sort()?

このコードはコードを8行に減らしますが、まったく同じことを実現し、繰り返されず、非常に理解しやすいことに気付くでしょう。

PythonZenあるPEP8を読んで、公式チュートリアルを実行してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Python:インデックスが範囲外の奇妙なケース

分類Dev

奇妙なPythonインデックスが範囲外

分類Dev

Pythonエラー:リストインデックスが範囲外です

分類Dev

pop()エラー:インデックスが範囲外のpython

分類Dev

ネストされたjsonのPythonテスト-リストインデックスが範囲外エラー

分類Dev

Python プロジェクトでの作業中にエラー: リスト インデックスが範囲外になります。

分類Dev

Pythonで関数が「リストインデックスが範囲外」というエラーを返すのはなぜですか?

分類Dev

リストインデックスが範囲外-インデックスエラーPython

分類Dev

Python辞書インデックスエラー:リストインデックスが範囲外です

分類Dev

Python3ファイルの「リストインデックスが範囲外です」エラー

分類Dev

エラーの解決:Pythonの「リストインデックスが範囲外です」

分類Dev

幅優先探索でのPythonの「リストインデックスが範囲外です」エラー

分類Dev

Pythonのインデントエラーとインデックスが範囲外のエラー

分類Dev

Python:インデックスが範囲外エラー

分類Dev

Pythonエラー:インデックスが範囲外です

分類Dev

Python インデックス エラーが範囲外

分類Dev

Pythonでの再帰的ソート-リストインデックスが範囲外

分類Dev

Python、リストエラー:IndexError:リストインデックスが範囲外です

分類Dev

インデックスの範囲外エラー:Python

分類Dev

Pythonの「notin」インデックスが範囲外のエラー

分類Dev

Python配列をループすると、リストインデックスが範囲外エラーになります

分類Dev

Pythonでエラー「リスト割り当てインデックスが範囲外」を解決する方法

分類Dev

Python-エラー:lib_type = fields [4] IndexError:リストインデックスが範囲外です

分類Dev

Pythonで「IndexError:リストインデックスが範囲外です」エラー

分類Dev

Python3.xでのリストインデックスの範囲外エラー

分類Dev

Pythonでpopを使用するとインデックスが範囲外エラーになります

分類Dev

Python エラーでの OLS ローリング回帰 - IndexError: インデックスが範囲外

分類Dev

BeautifulSoup(Python)で「リストインデックスが範囲外」になるのを防ぐ方法

分類Dev

リストインデックスの範囲外エラーPythonを解決する方法は?

Related 関連記事

  1. 1

    Python:インデックスが範囲外の奇妙なケース

  2. 2

    奇妙なPythonインデックスが範囲外

  3. 3

    Pythonエラー:リストインデックスが範囲外です

  4. 4

    pop()エラー:インデックスが範囲外のpython

  5. 5

    ネストされたjsonのPythonテスト-リストインデックスが範囲外エラー

  6. 6

    Python プロジェクトでの作業中にエラー: リスト インデックスが範囲外になります。

  7. 7

    Pythonで関数が「リストインデックスが範囲外」というエラーを返すのはなぜですか?

  8. 8

    リストインデックスが範囲外-インデックスエラーPython

  9. 9

    Python辞書インデックスエラー:リストインデックスが範囲外です

  10. 10

    Python3ファイルの「リストインデックスが範囲外です」エラー

  11. 11

    エラーの解決:Pythonの「リストインデックスが範囲外です」

  12. 12

    幅優先探索でのPythonの「リストインデックスが範囲外です」エラー

  13. 13

    Pythonのインデントエラーとインデックスが範囲外のエラー

  14. 14

    Python:インデックスが範囲外エラー

  15. 15

    Pythonエラー:インデックスが範囲外です

  16. 16

    Python インデックス エラーが範囲外

  17. 17

    Pythonでの再帰的ソート-リストインデックスが範囲外

  18. 18

    Python、リストエラー:IndexError:リストインデックスが範囲外です

  19. 19

    インデックスの範囲外エラー:Python

  20. 20

    Pythonの「notin」インデックスが範囲外のエラー

  21. 21

    Python配列をループすると、リストインデックスが範囲外エラーになります

  22. 22

    Pythonでエラー「リスト割り当てインデックスが範囲外」を解決する方法

  23. 23

    Python-エラー:lib_type = fields [4] IndexError:リストインデックスが範囲外です

  24. 24

    Pythonで「IndexError:リストインデックスが範囲外です」エラー

  25. 25

    Python3.xでのリストインデックスの範囲外エラー

  26. 26

    Pythonでpopを使用するとインデックスが範囲外エラーになります

  27. 27

    Python エラーでの OLS ローリング回帰 - IndexError: インデックスが範囲外

  28. 28

    BeautifulSoup(Python)で「リストインデックスが範囲外」になるのを防ぐ方法

  29. 29

    リストインデックスの範囲外エラーPythonを解決する方法は?

ホットタグ

アーカイブ