2017-06-29 8 views
0
私は抗体配列に番号を付ける ANARCIと呼ばれるツールを使用してい

、およびプログラムの出力は次のようになります。リストにタプルにタプルの値にアクセスする[エラー]

[((1, ' '), 'E'), ((2, ' '), 'V'), ..., ((113, ' '), 'A')] 

私がしようとしています番号を.csvファイルに保存するには、上記の短いセクションに示す空の文字列にアクセスするのに問題があります。これらの中には文字が入っているものもあり、文字列が空であるかどうかを確認する必要があります。これは私がこれを行うために書かれているコードです。この背後

with open(fileName + '.csv', 'wb') as myFile: 
    # sets wr to writer function in csv module 
    wr = csv.writer(myFile, quoting=csv.QUOTE_ALL) 
    # writes in headers 
    wr.writerow(headers) 
    # iterates through numbering 
    for row in numbering: 
     # gets to the innermost tuple 
     for tup in row: 
      # checks if the string contains a letter 
      if tup[1] != ' ': 
       # makes the number and letter a single string 
       numScheme = str(tup[0])+str(tup[1]) 
       # creates a list of values to write 
       varList = [baNumbering,numScheme,row[1]] 
       wr.writerow(varList) 
      else: 
       # if the string does not contain a letter, the list of values is created without the string 
       varList = [baNumbering,tup[0],row[1]] 
       wr.writerow(varList) 
     baNumbering = baNumbering + 1 

私の考えはfor row in numbering:タプルを含むタプルに私を取得し、for tup in row:は私が最も内側のタプルのインデックスをチェックすることが可能になるです。私はvarListに、数字、数字の付いた文字(そしておそらく手紙付き)、そしてその文字(["1","1","E"]または["30","29B","Q"])を含むリストにしたかったのです。しかし、エラーが表示されます:

Traceback (most recent call last): 
    File "NumberingScript.py", line 101, in <module> 
    Control() 
    File "NumberingScript.py", line 94, in Control 
    Num() 
    File "NumberingScript.py", line 86, in Num 
    SaveNumbering(numbering,numberingScheme) 
    File "NumberingScript.py", line 72, in SaveNumbering 
    WriteFile(numbering,numberingScheme,fileName) 
    File "NumberingScript.py", line 51, in WriteFile 
    if tup[1] != ' ': 
IndexError: string index out of range 

タプルの文字列にアクセスするには、より良い方法がありますか?私が見つけることができるすべてのリソースは、タプルのリストだけをカバーし、私がここにあるものと何をするべきかは言及していません。

答えて

2

tupが 'E'値を取得し、存在しないインデックスを取得しようとしているときに例外が発生します。

for row in numbering: 
      for tup in row: 
       if tup[1] != ' ': # Raised exception --> 'E'[1] 

私が正しくあなたの目標を理解していれば、これを使用しようとは:

DATA = [((1, ' '), 'E'), ((2, ' '), 'V'), ((113, ' '), 'A')] 

def get_tuples(data): 
    for item in data: 
     for element in item: 
      if isinstance(element, tuple): 
       yield element 
      else: 
       continue 

for tup in get_tuples(DATA): 
    print(tup) 

出力

(1, ' ') 
(2, ' ') 
(113, ' ') 
+0

は、より多くの特異性を持つ私の問題を指摘いただきありがとうございます。しかし、将来は回答セクションを使用して実際の回答を投稿し、コメントセクションを使用して回答ではない有用なコメントを投稿してください。エラーの原因となっている文字列ではなく、タプルだけにアクセスする方法を知っていますか? – MTJ