美文网首页生物信息学与算法
生信编程实战第11题(python)

生信编程实战第11题(python)

作者: 天秤座的机器狗 | 来源:发表于2018-08-25 21:10 被阅读37次

    题目来自生信技能树论坛

    image.png

    题目不难,先给出代码

    import sys
    args=sys.argv
    filename=args[1]
    aList=[]
    for i in range(1,23):
      i=str(i)     #这个转换特别重要,如果不换,存到列表中的将是数字,不是字符串
      aList.append(i)
    
    with open(filename) as fh:
      for line in fh:
         if line.startswith("#"):
             continue
         lineL=line.strip().split("\t")
         chr_num=lineL[0]            #当然这里也是可以考虑转成int,上面的不用转str,但是!!,并不是所有的chr_num都是数字形式的str,所以不能转int,会报错
         if chr_num in aList:
            name=chr_num+".txt"
            f=open(name,"a")     #a很重要,表示写入文件,如果文件存在,则在结尾追加
            f.write(line)    #写入文件
            f.close()   #文件关闭
         else :
            name="else_chr.txt"
            f=open(name,"a")
            f.write(line)
            f.close()
    
    
    python3 dis.py CCDS.current.txt
    
    image.png

    这里主要说几个问题:

    1. python中写入文件可以用的模式如下:
      f=open(filename,"a")
      f.write(content)
      f.close()
      其中a很重要,表示“写入,如果文件有内容,则在末尾追加写入”
      这样就可以保证,无论染色体的顺序怎么排序,只要提取染色体号作为文件名,那么,相同的染色体那一行都会写入同一个文件,因为文件存过一次后,相同的染色体的行可以在该文件结尾追加。

    这里就顺便把open函数的其他mode了解一下:
    'rt'为默认方式
    'r' open for reading (default)——只读,默认方式
    'w' open for writing, truncating the file first——写入,会覆盖源文件内容
    'x' create a new file and open it for writing——创建新文件,并写入内容,如果文件已存在,将会报错:FileExistsError
    'a' open for writing, appending to the end of the file if it exists——写入,如果文件有内容,则在末尾追加写入
    'b' binary mode——二进制模式
    't' text mode (default)——文本模式
    '+' open a disk file for updating (reading and writing)——更新磁盘文件,读写
    'U' universal newline mode (deprecated)——在python3中已经弃用

    2.因为题目要求是1~22号染色体分别存入文件,其他的存入同一个文件
    所以我的想法是创建一个1~22数字的存入一个列表,每次都判断染色体号在不在列表,在就分别存,不在就存到一个共同的else的文件。
    这个思路没有问题,但是,关键在于
    我用for 循环得到的是整型存入列表的,而逐行读取的染色体号是字符串型,如果不转换,直接判断就会发现都不在列表中。
    所以需要转换,但是只能是把整型转成字符串型
    因为染色体号还有其他非数字型的字符串,转整型会报错的。

    相关文章

      网友评论

        本文标题:生信编程实战第11题(python)

        本文链接:https://www.haomeiwen.com/subject/oszgiftx.html