python脚本1——duym师姐

版权声明:张晶晶 https://blog.csdn.net/qq_42351541/article/details/90205252

她的要求如下
我把思路发给你,然后你看看用哪个语言好处理
以每一行的第一列为基准,每一个queryID取第一行,然后跳转到下一行,若仍是此ID,对比第3-12列的数字是否和第一行的相等,若相等则取出,若不等则舍弃。跳转到下一行,queryID换成了另一个,同样取出这个ID的第一行,然后跳转下一行重复循环,若仍是此ID,对比第3-12列的数字是否和第一行的相等,若相等则取出,若不等则舍弃。
比如,第64行evm.model.scaffold2136.2,先取出它的第一行。然后往下跳转,仍是evm.model.scaffold2136.2,对比第3-12列的数字,第11列8.41E-63和7.20E-63不相等,这一行就舍弃。72行evm.model.scaffold3386.5,取出这一行之后,下一行仍是evm.model.scaffold3386.5,而且第3-12列和上一行完全相等,则也取出这一行。再往下跳转evm.model.scaffold289.6,它只有这一行,就取这一行就行。
两行中 3-12列 如果有不相等的话 舍弃下面的那行 是吗?

跟第二列都没有关系是吧?

但是最后输出的文档里得是一整行的内容

查看部分数据
在这里插入图片描述

脚本如下
#!/usr/bin/env python

import sys

if len(sys.argv) != 2:
print sys.argv[0], ‘filename’
sys.exit()

if name == ‘main’:
del_list = []
filename = sys.argv[1]
with open(filename) as f:
for line in f.readlines():
if len(line.split()) == 0:
continue
l_r1 = line.split()[0]
l_r2 = ’ '.join(line.split()[2:])
if l_r1 in del_list:
continue
print line.strip()
with open(filename) as f1:
for line1 in f1.readlines():
if line == line1:
continue
if len(line1.split()) == 0:
continue
l1_r1 = line1.split()[0]
l1_r2 = ’ '.join(line1.split()[2:])
if l_r1 == l1_r1 and l_r2 == l1_r2:
print line1.strip()
del_list.append(l_r1)

我愿。:
如果你是用服务器的话 就执行 vi ceshi.py
我愿。:
这个是直接输出到终端 你把结果重定向到 你想要的文件中阿

我愿。:
python ceshi.py 你的txt文本
我愿。:
比如 运行那行命令 >duyimeng.txt
我愿。:
然后输入i 把这段代码复制进去 按ESC然后 : 加wq保存
:
师妹,为啥会用len
我愿。:
你试试只输入脚本 不输入输入文件 就知道了 它会报错 提示你 这个脚本 是 filename
第一个if那些其实完全可以不用要
第二个len不是检查有没有空行吗?有空行的话就跳过终止本次循环

猜你喜欢

转载自blog.csdn.net/qq_42351541/article/details/90205252