美文网首页
Python 随笔

Python 随笔

作者: 斩毛毛 | 来源:发表于2020-05-01 14:10 被阅读0次
    1. 字典中,get()的用法
    colors = ['red','green','blue','red']
    d = {}
    for  i in colors:
           d[i] = d.get(i, 0) +1
    # 若无key值,可任意设置缺省值
    
    1. sorted
    lis = ['red','blue','pep','yellow']
    print(sorted(lis,key=len, reverse=True))
    # key 按长度排序,True表示降序,False表示升序
    
    1. eval exec
    • eval:字符串求值并返回结果,不支持任何形式赋值操作,如eval(“2*3”)结果返回6
    • exec;执行字符串中的内容,exec(“print("adc")”)。结果adc
    1. heapq库,以及Counter
    # heapq可以取自定义的最大或者最小值个数,
    lis = [1,2,3,4,5,6,7]
    # 取出列表中最大的两个数字
    heapq.nlargester(2,lis)
    [6,7]
    
    # Counter可以计算一个列表中数字出现的次数
    from collections import Counter
     a = [11,2,2,3,4,5,6,6,7,8,8]
    Counter(a)
    Counter({2: 2, 6: 2, 8: 2, 3: 1, 4: 1, 5: 1, 7: 1, 11: 1}) 
    # 得到一个字典形式
    
    1. 若遇到unhashbale..则取一个临时变量代替

    2. 若想用python2 除法得到小数,则需要添加一个模块

     from __future__ import division
    # 这样做除法就会得到真实值
    
    1. 将fasta格式序列存入字典时
    #一下代码不可取
    #!/usr/bin/env python
    import sys
    info = {}
    with open(sys.argv[1]) as f,\
         open("result.fa","w") as o:
         for i in f:
             if '>' in i:
                key = i.strip()
                info[key] = ''
             else:
                info[key] += i.strip()
         for k,v in info.items():
             o.write("%s\n%s\n" %(k,v))
    
    # 上述以字符串形式进行添加,字符串的追加并不是在原来的基础上进行追加,而是将追加后的字符串重新开辟一块新的内存,时间更长
    
    #应该以列表的形式进行添加
    
    #!/usr/bin/env python
    
    import sys,time
    
    info = {}
    with open(sys.argv[1]) as f,\
         open("result.fa","w") as o:
         for i in f:
             if '>' in i:
                key = i.strip()
                info[key] = []
             else:
                info[key].append(i.strip())
         for k,v in info.items():
             o.write("%s\n%s\n" %(k,"".join(v)))
    
    1. 循环
    • 最基础列表推倒式
    [x*2 for x in range(5)]
    [0, 2, 4, 6, 8]
    
    • 带有if语句
    # 去除列表中所有偶数,一个条件
    L = [1,2,3,4,5,6]
    L = [x for x in L if X %2 !=0]
    L
    [1,3,5]
    
    # 多个条件
    print [x for x in range(10) if x %2 ==0 and x %6 ==0]
    [0, 6]
    
    #if-else
    print [x+1 if x>=5 else x*10 for x in range(10)]
    [0, 10, 20, 30, 40, 6, 7, 8, 9, 10]
    
    • 带有for嵌套
    #嵌套时,按照从左到右顺序,分别是外层循环到内层循环
    [x + y for x in 'ab' for y in 'jk']
    ['aj','ak','bj','bk']
    
    • 既有if语句又有for嵌套
    [(x,y) for x in range(5) if x %2 ==0 for y in range(5) if y %2 ==1]
    [(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
    
    1. zip() 函数
    ##合并list,得到元组的列表
    a = [1,2,3]
    b = [1,2,3]
    zip(a,b)
    得到:[(1, 1), (2, 2), (3, 3)]
    
    ## 添加*,可对list中的元素进行组合
    all = [[1, 2, 3], [1, 2, 3], [1, 2,3]]
    zip(*all)
    得到:[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
    
    1. python搜索路径添加
      倒入python模块时,是根据python所处的python路径来进行查找。
    # 列出python所有的路径
    python
    import sys
    sys.path
    # 即可得到所有的路径
    ## 若想添加路径,可以在脚本中进行添加:
    import sys
    sys.path.append("module/path")
    ## 或者修改~/.bashrc
    export PYTHONPATH=/Your/modelu/PATH/:$PYTHONPATH
    source ~/.bashrc
    
    1. re 中特殊构造
    (?: ..) 和(...)功能差不多,但是不作为分组,可理解为一个整体,如下例子
    (?:abc){2}        ----> abcabc
    abc{2}              ----> abcc
    
    1. 清空python路径
      遇到如下报错时AttributeError: module 'enum' has no attribute 'IntFlag',
      是PYTHONPATH的设置错误,在.bashrc中存留有以前使用python2时留下的配置,导致python3不能找到正确的enum位置,注释掉bashrc中相关语句后,清空$PYTHONPATH变量即可
    unset PYTHONPATH
     #查看是否清空
     echo $PYTHONPATH
    

    13、如何打开bam文件

    使用一个模块os.popen()

    import os
    os.popen(command[, mode[, bufsize]])
    - command: 命令
    - mode: 'r' 或者‘w'; 默认'r'
    - bufsize: 指明了文件需要的缓冲大小:0意味着无缓冲;1意味着行缓冲;其它正值表示使用参数大小的缓冲(大概值,以字节为单位)。负的bufsize意味着使用系统的默认值,一般来说,对于tty设备,它是行缓冲;对于其它文件,它是全缓冲。如果没有改参数,使用系统的默认值。
    
    ## 比如打开bam文件
    f = os.popen('samtools view '+ sam_file, 'r')
    

    14、简历虚拟环境

    python -m venv T_ve && source T_ve/bin/activate
    

    相关文章

      网友评论

          本文标题:Python 随笔

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