Python 随笔

2020-05-01  本文已影响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
  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]
# 去除列表中所有偶数,一个条件
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]
#嵌套时,按照从左到右顺序,分别是外层循环到内层循环
[x + y for x in 'ab' for y in 'jk']
['aj','ak','bj','bk']
[(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
上一篇下一篇

猜你喜欢

热点阅读