首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除文本文件中的唯一值-如果存在其他值- Python

删除文本文件中的唯一值-如果存在其他值- Python
EN

Stack Overflow用户
提问于 2015-02-04 21:11:49
回答 1查看 264关注 0票数 0

我有一个文本文件,如下所示:

代码语言:javascript
运行
复制
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列中有一个或多个匹配值的所有行。下面的样机代码是我想要做的事情:

代码语言:javascript
运行
复制
For loop
    if lineXcolumnY == lineX2columnY2
    OR
    if lineX2columnY2 == lineXcolumnY
        print line X
    Else
        Delete line X

在上面的数据示例中,代码将为我提供:

代码语言:javascript
运行
复制
A   B   C   D
3   3   5   8
8   1   5   7

我完全是Python的新手,所以最让我困惑的是如何在脚本中实际引用文本文件,以及如何引用特定的列。在R中,我会使用Data$C来引用列,但在Python中?

EN

回答 1

Stack Overflow用户

发布于 2015-02-04 21:31:45

您可以使用最大长度为2的collections.deque,在每次迭代中保留2行,然后比较它们的第3列:

代码语言:javascript
运行
复制
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上的文件中:

代码语言:javascript
运行
复制
with open('newefile.txt','w') as f:
     for line in last_q :
          f.write(line)

结果:

代码语言:javascript
运行
复制
3   3   5   8 
8   1   5   7

在此代码中,您需要在每次迭代中将这些行附加到deque

代码语言:javascript
运行
复制
q.append(line.strip())

因此,您需要使用以下命令检查q的长度:

代码语言:javascript
运行
复制
if len(q)==2

然后,您可以通过拆分行来访问第三列,然后拾取第三个元素:

代码语言:javascript
运行
复制
q[0].split()[2]

如果相等,您可以将deque设置为last_q,使用extend

代码语言:javascript
运行
复制
if q[0].split()[2]==q[1].split()[2] : 
      last_q.extend(q)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28322317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档