我是 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
第一列给出了组,第二列给出了位置,第三列给出了我正在读取以运行计算的值。我正在尝试根据位置在“滑动窗口”中执行这些计算。另一个因素是每个组都是分开计算的,因为每个组的位置编号都重新开始。在我的代码中,我首先尝试在执行任何操作之前将组 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
我遇到的问题是它只读取我数据集的第一行,仅此而已。因此,如果我在“for row in reader”之后插入一个“print row”,我会得到这样的输出:
['Group1.1', '424', '0.082048032']
如果我编写完全相同的代码而没有任何进一步的计算和循环,它将打印数据集中的每一行。在这种情况下,我将如何读取此循环开头的每一行?
请您参考如下方法:
您每次都在重新初始化阅读器。本质上,这导致它卡在第一行。试试这个
reader=csv.reader((line.replace('\0','') for line in newfile), delimiter="\t")
for row in reader:
scaffolds.append(row[0])
unique1(scaffolds)
newfile.seek(0)
if row[0] == unique_scaffolds[i]:
#...perform the calculations
else:
i+=1
