私は生物工学の博士課程の学生で、研究の一部を自動化するために Python プログラミングを独学で学ぼうとしていますが、より大きなリスト内のサブリストを処理する際に問題が発生したようです。解決する。
基本的に、私がやろうとしていることの目標は、さまざまな DNA アセンブリ方法を使用して構築しているプラスミド シーケンスのリストを含む CSV ファイルを処理し、必要なプライマー シーケンスを吐き出す小さなスクリプトを作成することです。プラスミドを構築するために注文します。
私が扱っているシナリオは次のとおりです。
プラスミドを構築したい場合、そのプラスミドの全配列を Excel スプレッドシートに入力する必要があります。「Gibson」と「iPCR」と呼ばれる 2 つの DNA アセンブリ方法のいずれかを選択する必要があります。各「iPCR」アセンブリには、リスト内の 1 行しか必要ありません。そのため、構築しようとしているプラスミドの完全な配列を 1 つのセルに入れるだけでよいので、それらの連中を処理する方法は既に知っています。一方、「ギブソン」アセンブリでは、完全な DNA シーケンスを小さなチャンクに分割する必要があるため、1 つのプラスミドを完全に記述するために、Excel スプレッドシート内で 2 ~ 5 行が必要になる場合があります。
したがって、スプレッドシートは次のようになります。
構築.....戦略...名前
1.....ギブソン.....P(OmpC)-cI::P(cI)-LacZ コントローラ
1.....ギブソン.....P(OmpC)-cI::P(cI )-LacZ コントローラー
1.....Gibson.....P(OmpC)-cI::P(cI)-LacZ コントローラー
2.....iPCR.......P(cpcG2)- K1F 位置の K1F コントローラ。フィードバック
3.....ギブソン.....プロモーター位置がスワップされた P(cpcG2)-K1F コントローラー
3.....ギブソン.....プロモーター位置がスワップされた P(cpcG2)-K1F コントローラー
4.. ...iPCR.......P(cpcG2)-より強力な K1F RBS ライブラリを備えた K1F コントローラ
この長さのリストは十分に代表的だと思います。
私が直面している問題は、リストを実行してギブソンを処理できるようにしたいのですが、コードを思いどおりに動作させることができないようです。これまでに書いたコードは次のとおりです。
#import BioPython Tools
from Bio.Seq import Seq
from Bio.Alphabet import IUPAC
#import csv tools
import csv
import sys
import os
with open('constructs-to-make.csv', 'rU') as constructs:
construct_list = csv.reader(constructs, delimiter=',')
construct_list.next()
construct_number = 1
primer_list = []
temp_list = []
counter = 2
for row in construct_list:
print('Current row is row number ' + str(counter))
print('Current construct number is ' + str(construct_number))
print('Current assembly type is ' + row[1])
if row[1] == "Gibson": #here, we process the Gibson assemblies first
print('Current construct number is: #' + row[0] + ' on row ' + str(counter) + ', which is a Gibson assembly')
## print(int(row[0]))
## print(row[3])
if int(row[0]) == construct_number:
print('Adding DNA sequence from row ' + str(counter) + ' for construct number ' + row[0])
temp_list.append(str(row[3]))
counter += 1
if int(row[0]) > construct_number:
print('Current construct number is ' + str(row[0]) + ', which is greater than the current construct number, ' + str(construct_number))
print('Therefore, going to work on construct number ' + str(construct_number))
for part in temp_list: #process the primer design work here
print('test')
## print(part)
construct_number += 1
temp_list = []
print('Adding DNA from row #' + str(counter) + ' from construct number ' + str(construct_number))
temp_list.append(row)
print('Next construct number is number ' + str(construct_number))
counter += 1
## counter += 1
if str(row[1]) == "iPCR":
print('Current construct number is: ' + row[0] + ' on row ' + str(counter) + ', which is an iPCR assembly.')
#process the primer design work here
#get first 60 nucleotides from the sequence
sequence = row[3]
fw_primer = sequence[1:61]
print('Sequence of forward primer:')
print(fw_primer)
last_sixty = sequence[-60:]
## print(last_sixty)
re_primer = Seq(last_sixty).reverse_complement()
print('Sequence of reverse primer:')
print(re_primer)
#ending code: add 1 to counter and construct number
counter += 1
construct_number += 1
## if int(row[0]) == construct_number:
## else:
## counter += 1
## construct_number += 1
## print(temp_list)
## for row in temp_list:
## print(temp_list)
## print(temp_list[-1])
# fw_primer = temp_list[counter - 1].
(私はコードがおそらく初心者に見えることを知っています.Javaの入門以外のプログラミングクラスを行ったことはありません.)
このコードの問題は、「Gibson」アセンブリによって構築しようとしている n 個の「コンストラクト」(別名プラスミド) がある場合、最初の n-1 個のプラスミドは処理されますが、最後のプラスミドは処理されないことです。ただし、このコードを記述するためのより良い方法は考えられませんが、実装しようとしているワークフローについては、リスト内の「n」個のものを処理する方法を知っていることがわかりますが、それぞれの「もの」可変数の行の " は、私にとって本当に便利です。
ここで誰かの助けに本当に感謝します! どうもありがとう!