私はPythonにかなり慣れていません。非常に大きな.csvファイル(約680万行)のデータを処理しようとしています。行の例は次のようになります。
Group1.1 57645 0.0954454545
Group1.1 57662 0.09556544778
Group1.13 500 0.357114538
Group1.13 504 0.320618298
Group1.13 2370 0.483851368
Group1.14 42 0.5495688
最初の列はグループを示し、2番目は位置を示し、3番目は計算を実行するために読み込んでいる値を示します。これらの計算は、位置に基づいた「スライディングウィンドウ」で実行しようとしています。もう1つの要因は、グループごとに位置番号が再開されるため、各グループが互いに別々に計算されることです。私のコードでは、何かをする前にまずグループIDをリストとして読み取ろうとし、そのリストを「一意化」してから、そのリストをその特定のグループに対してのみ「スライディングウィンドウ」を実行するための基礎として使用します。次に、一意のリスト内の次のグループIDに移動して、計算を再実行します。これが私のコードの基本です(unique1関数はリストを一意化する簡単な方法です:
for row in reader:
scaffolds.append(row[0])
unique1(scaffolds)
newfile.seek(0)
reader=csv.reader((line.replace('\0','') for line in newfile), delimiter="\t")
if row[0] == unique_scaffolds[i]:
#...perform the calculations
else:
i+=1
私が遭遇している私の問題は、それが私のデータセットの最初の行を読み取っているだけで、それ以上は何も読み取っていないということです。したがって、「リーダーの行の場合」の直後に「行の印刷」を挿入すると、次のような出力が得られます。
['Group1.1', '424', '0.082048032']
これ以上の計算やループを行わずにこれとまったく同じコードを作成すると、データセット内のすべての行が出力されます。この状況では、このループの最初のすべての行をどのように読み取るのでしょうか。