鱼C论坛

 找回密码
 立即注册
查看: 1017|回复: 4

[已解决]新手python求助,逐行比较,输出不同类型,急急急。。。。

[复制链接]
发表于 2021-11-12 13:30:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 poppy章鱼 于 2021-11-12 14:14 编辑

求大佬帮忙,第二次发帖,急急急。。。。

数据如下,第一列是顺序排列的
scaffold_1..12548467    6
scaffold_1..12548468    6
scaffold_1..12548469    6
scaffold_1..12548470    6
scaffold_1..12548471    6
scaffold_1..12548472    6
scaffold_1..12548473    5
scaffold_1..12548474    5
scaffold_1..12548475    6
scaffold_1..12548476    6
scaffold_1..12548477    6
scaffold_1..12548478    5
scaffold_1..12548479    4
scaffold_1..12548480    4
scaffold_1..12548481    4
scaffold_1..12548482    4
scaffold_1..12548483    4




想要的结果输出格式
scaffold_1..12548467        scaffold_1..12548472        6        6
scaffold_1..12548473        scaffold_1..12548474        5        2
scaffold_1..12548475         scaffold_1..12548477        6        3
scaffold_1..12548478                                                5        1
scaffold_1..12548479        scaffold_1..12548483        4        5


##
逐行读取, 比如原数据中第二列为6,总共连续出现了6行第二列都是6,,就输出一行,格式为: start,end,6,频次  

然后后面再出现6 ,又重新输出,start,end,6,频次


如果第二列是1,则只输出start



感激不尽~~~
最佳答案
2021-11-12 14:20:49
本帖最后由 hrpzcf 于 2021-11-12 14:25 编辑
  1. # coding: utf-8

  2. # string = """scaffold_1..12548467    6
  3. # scaffold_1..12548468    6
  4. # scaffold_1..12548469    6
  5. # scaffold_1..12548470    6
  6. # scaffold_1..12548471    6
  7. # scaffold_1..12548472    6
  8. # scaffold_1..12548473    5
  9. # scaffold_1..12548474    5
  10. # scaffold_1..12548475    6
  11. # scaffold_1..12548476    6
  12. # scaffold_1..12548477    6
  13. # scaffold_1..12548478    5
  14. # scaffold_1..12548479    4
  15. # scaffold_1..12548480    4
  16. # scaffold_1..12548481    4
  17. # scaffold_1..12548482    4
  18. # scaffold_1..12548483    4"""


  19. with open("data.txt", "rt", encoding="utf-8") as f:
  20.     # slist = string.splitlines()
  21.     slist = f.read().splitlines()
  22.     freq = 1
  23.     sp = slist[0].split()
  24.     start, num = sp[0], sp[-1]
  25.     end = start
  26.     for s in slist[1:]:
  27.         if s[-1] == num:
  28.             freq += 1
  29.             end = s.split()[0]
  30.         else:
  31.             if freq == 1:
  32.                 end = " " * len(end)
  33.             print("{} {} {} {}".format(start, end, num, freq))
  34.             freq = 1
  35.             sp = s.split()
  36.             start, num = sp[0], sp[-1]
  37.             end = start
  38.     else:
  39.         print("{} {} {} {}".format(start, end, num, freq))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-12 14:20:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hrpzcf 于 2021-11-12 14:25 编辑
  1. # coding: utf-8

  2. # string = """scaffold_1..12548467    6
  3. # scaffold_1..12548468    6
  4. # scaffold_1..12548469    6
  5. # scaffold_1..12548470    6
  6. # scaffold_1..12548471    6
  7. # scaffold_1..12548472    6
  8. # scaffold_1..12548473    5
  9. # scaffold_1..12548474    5
  10. # scaffold_1..12548475    6
  11. # scaffold_1..12548476    6
  12. # scaffold_1..12548477    6
  13. # scaffold_1..12548478    5
  14. # scaffold_1..12548479    4
  15. # scaffold_1..12548480    4
  16. # scaffold_1..12548481    4
  17. # scaffold_1..12548482    4
  18. # scaffold_1..12548483    4"""


  19. with open("data.txt", "rt", encoding="utf-8") as f:
  20.     # slist = string.splitlines()
  21.     slist = f.read().splitlines()
  22.     freq = 1
  23.     sp = slist[0].split()
  24.     start, num = sp[0], sp[-1]
  25.     end = start
  26.     for s in slist[1:]:
  27.         if s[-1] == num:
  28.             freq += 1
  29.             end = s.split()[0]
  30.         else:
  31.             if freq == 1:
  32.                 end = " " * len(end)
  33.             print("{} {} {} {}".format(start, end, num, freq))
  34.             freq = 1
  35.             sp = s.split()
  36.             start, num = sp[0], sp[-1]
  37.             end = start
  38.     else:
  39.         print("{} {} {} {}".format(start, end, num, freq))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-12 14:42:17 | 显示全部楼层

谢谢您,非常感谢。我在本地测试是对了。但是我的原文件较大,所以我改了一下输入方式,结果报错了。您有帮我解答下吗?感激不尽,祝好。
#!/usr/bin/python3  
# -*- coding: utf-8 -*-
import sys

args=sys.argv
input1=args[1]

with open(input1, 'r') as f:
    slist = f.splitlines()
    freq = 1
    sp = slist[0].split()
    start, num = sp[0], sp[-1]
    end = start
    for s in slist[1:]:
        if s[-1] == num:
            freq += 1
            end = s.split()[0]
        else:
            if freq == 1:
                end = " " * len(end)
            print("{} {} {} {}".format(start, end, num, freq))
            freq = 1
            s = s.split()
            start, num = s[0], s[-1]
            end = start
    else:
        print("{} {} {} {}".format(start, end, num, freq))


报错信息:
python3 coordinate.count3.py ./05.txt > 05.new.txt
Traceback (most recent call last):
  File "coordinate.count3.py", line 9, in <module>
    slist = f.splitlines()
AttributeError: 'file' object has no attribute 'splitlines'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-12 14:45:27 | 显示全部楼层
poppy章鱼 发表于 2021-11-12 14:42
谢谢您,非常感谢。我在本地测试是对了。但是我的原文件较大,所以我改了一下输入方式,结果报错了。您有 ...


slist = f.splitlines()写错了,改成
slist = f.read().splitlines()

但是如果文件比可用内存还大的话就麻烦了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-12 14:57:18 | 显示全部楼层
hrpzcf 发表于 2021-11-12 14:45
slist = f.splitlines()写错了,改成
slist = f.read().splitlines()

谢谢您,跑成功了,我在服务器上跑,没事。我学习下你的脚本,祝万事胜意。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 11:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表