2

Python初学者在这里。我正在逐列遍历文本文件。

for line in Input:
    line = line.rstrip() 
    fields = line.split("\t")   
    for col in fields[5:]:

当我遍历列时,我将如何跟踪我所在的列?我想在输出中打印当前相关的列,所以当我得到结果时,我知道结果指的是哪一列。似乎有一个明显的答案,但我不知道!

在此先感谢您的帮助。我发现这里的人们的乐于助人势不可挡。

一些输入/输出示例:

输入文件中的行:

 chr20   1032    .       A     1/1 1/1 1/1 0/1 0/0
 chr20   1326    .       T     1/1 1/1 1/1 0/1 0/0
 chr20   1388    .       C     0/0 1/1 ./. 0/1 0/0

然后我通过这些行查看第 5 列,例如 1/1、1/1、0/0 并计算一些输出统计信息。我的输出文件包含使用第 5 列计算的每 x 行的统计信息。我希望我的输出文件还包括第 6、7 列等的结果,并且输出文件中的行告诉我哪一列数据计算自。本质上是为了节省我为每列单独重新运行脚本。

输出示例:

5   chr1    230344070   231345012   1000942 200720  66560   119841  7160    5.63775088385   94.3622491161
5   chr1    231345012   232345029   1000017 167920  55040   106160  3360    3.06793279766   96.9320672023
5   chr1    232345029   233345195   1000166 179280  64841   96079   9180    8.72134449311   91.2786555069

这里的第一列指的是它是根据第 5 列中的值计算的事实

对于索引,枚举中的列(字段 [5:]):

最好的,

鲁巴尔

4

2 回答 2

4

你可以试试这样的

for i,col in enumerate(fields[5:], 5):
    ....

enumerate()将为您生成一个索引值,默认情况下它从 0 开始,除非将起始值指定为 enumerate() 的第二个参数,如上图所示 5。

变量i将从值 5 开始,并允许您跟踪您正在处理的当前列以及col(与以前一样)该列中字段的值。

或者,为了方便和更容易修改,您可以使用变量:

start_col = 5
for i,col in enumerate(fields[start_col:], start_col):
    ....

--- 更新回复以下评论

我仍然不太确定我是否理解您的评论,但如果您发布的循环位于更大的循环内,您可以像这样跟踪您当前的列:

cur_column = 5
for line in Input:
    line = line.rstrip() 
    fields = line.split("\t")   
    for col in fields[cur_colum:]:
       ...
       ...

cur_column += 1 # done processing current column, increment value to next column

如果您的代码太大而无法发布,发布一些简单的输入/输出示例会有所帮助。如果没有更多信息,很难真正知道如何提供帮助。我希望这是有帮助的。

于 2012-06-03T13:27:31.870 回答
1

您可以使用内置函数枚举

for index, col in enumerate(fields[5:]):
于 2012-06-03T13:38:01.060 回答