我有一个文本文件,如下所示:
A B C D
0 4 3 5
3 3 5 8
8 1 5 7
9 3 7 9数据按列C排序。我要做的是编写一个Python (3.4)来删除每一行,其中列C中的值不等于另一行中列C的值。因此,我需要取出C列中有一个或多个匹配值的所有行。下面的样机代码是我想要做的事情:
For loop
if lineXcolumnY == lineX2columnY2
OR
if lineX2columnY2 == lineXcolumnY
print line X
Else
Delete line X在上面的数据示例中,代码将为我提供:
A B C D
3 3 5 8
8 1 5 7我完全是Python的新手,所以最让我困惑的是如何在脚本中实际引用文本文件,以及如何引用特定的列。在R中,我会使用Data$C来引用列,但在Python中?
发布于 2015-02-04 21:31:45
您可以使用最大长度为2的collections.deque,在每次迭代中保留2行,然后比较它们的第3列:
from collections import deque
q = deque(maxlen=2)
last_q=deque()
with open('newefile.txt','r') as f:
for line in f:
q.append(line.strip())
if len(q)==2 :
if q[0].split()[2]==q[1].split()[2] :
last_q.extend(q)
print q[0],'\n',q[1]最后,你可以将结果写在last_q上的文件中:
with open('newefile.txt','w') as f:
for line in last_q :
f.write(line)结果:
3 3 5 8
8 1 5 7在此代码中,您需要在每次迭代中将这些行附加到deque:
q.append(line.strip())因此,您需要使用以下命令检查q的长度:
if len(q)==2然后,您可以通过拆分行来访问第三列,然后拾取第三个元素:
q[0].split()[2]如果相等,您可以将deque设置为last_q,使用extend:
if q[0].split()[2]==q[1].split()[2] :
last_q.extend(q)https://stackoverflow.com/questions/28322317
复制相似问题