python學(xué)習(xí):零碎的內(nèi)容

筆記內(nèi)容:
和Python相關(guān)的一些慕匠,無(wú)法分類的內(nèi)容乎莉。用于日常記錄。介于放個(gè)假回來(lái)就以驚人的速度忘掉很多以前會(huì)的東西魁索。所以做個(gè)記錄以備“可能哪天會(huì)忘記”侨核。

  • 似乎有些筆記用python2,有些用python3...=_= 一般來(lái)說(shuō)應(yīng)該2和3都能用,除非特殊注明撬码。
  1. [u'OTU1', u'OTU2', u'OTU3'] ----> ['OTU1', 'OTU2', 'OTU3']
    去掉list中的u。u即其unicode殴瘦。在Python中使用ok健盒,但是當(dāng)導(dǎo)出字符型的list在R中操作時(shí)會(huì)出現(xiàn)問(wèn)題。
    兩個(gè)方法:
a = [u'OTU1', u'OTU2', u'OTU3']
test = [str(item) for item in a]
test_ = [item.encode('utf-8') for item in a]
  1. 用pycharm install packages(不能再忘了)
    File --> Settings --> project:XXXX (project settings) --> project interpreter --> 右上角加號(hào)
    命令行:
    sudo pip install package-name

  2. 把list和list名稱完整的寫(xiě)到txt里
    比方說(shuō)要把a(bǔ)寫(xiě)入txt文檔巴碗,a = ['OTU1', 'OTU2', 'OTU3']
    打開(kāi)這個(gè)txt文檔朴爬,就看見(jiàn):a = ['OTU1', 'OTU2', 'OTU3']
    ...

  3. 查看Ubuntu系統(tǒng)版本
    打開(kāi)terminal,
    lsb_release -a

  4. string.startswith('a')
    返回TrueFalse, 查看一個(gè)String是否由a起頭

  5. windows下安裝python并且修改環(huán)境變量
    在python官網(wǎng)上https://www.python.org/downloads/下載.exe然后雙擊打開(kāi),一路next橡淆,在命令行里輸入
    C:\Users\username>path=%path%;C:\Python27
    (C:\Python27是python的安裝路徑)

  6. 查看一個(gè)模塊的版本
    在ipython里:
    import pandas as pd
    pd.__version__

  7. 快速瀏覽一下數(shù)據(jù)狀況:
    df.head() 查看前5行
    df.shape 查看行列數(shù)
    df['colname'].value_counts()df.colname.value_counts()對(duì)多分類變量召噩,列出每一類的counts數(shù)目。如果是數(shù)值型逸爵,會(huì)把每個(gè)數(shù)值當(dāng)作分類變量
    df.colname.count() 給出該列non-NaN的個(gè)數(shù)具滴。在df.count()中使用時(shí),可以指定axis=
    df.describe() 只作用于數(shù)值型變量师倔,會(huì)羅列出其數(shù)目构韵,平均值,標(biāo)準(zhǔn)差趋艘,極大極小值及四分位間距疲恢。

  8. os 的常規(guī)用法
    os.getcwd() 類似R里的 getwd()
    os.chdir("XXX/XXX/XXX") 改變當(dāng)前工作目錄的路徑
    os.path.join("XX/", "XXX.doc") 得到XX/XXX.doc
    os.path.expanduser('~') 得到home目錄
    os.path.split("XX/XXX/test.doc")得到兩個(gè)變量,分別是XX/XXXtest.doc瓷胧,即路徑及其文件名(帶有擴(kuò)展名)
    os.path.splitext("test.doc")得到文件名及其擴(kuò)展名兩個(gè)變量显拳,即test.doc
    os.path.realpath('XX.doc') 返回該文件的絕對(duì)路徑(將該文件和當(dāng)前工作目錄join在一起)
    亂入一個(gè)glob.glob("*.csv") 把工作目錄中所有以.csv結(jié)尾的文件名稱列出來(lái),并放進(jìn)一個(gè)List里搓萧,返回值為一個(gè)List

  9. 把dictionary的key和value對(duì)調(diào)
    {value:key for key, value in a_dict.items()}

  10. .format和占位符%s
    "{0} 's password is {1}".format(a,b)
    "%s 's password is %s" % (a,b)
    兩者output是一樣的: "username 's password is password"

  11. 要輸入多行string:

a = '''
XXXXX
XXX
XX
'''
print a 
'\nXXXXX\nXXX\nXX\n'
  1. re正則
    e.g. 1
    pattern = '^M(b|cd|pp)[abc]N$'
    ^ 以M為開(kāi)頭萎攒;$以N為結(jié)尾,中間的()內(nèi)為一個(gè)part矛绘,為b或者cd或者pp.(必須是exactly為b或者cd或者pp
    [abc]方括號(hào)的意思為“其中任意一個(gè)字符”耍休。即abc中任意一個(gè)字母。
    e.g. 2
    pattern = '^M{0,3}(\d{3})$'
    {}代表了它前面那個(gè)字符可以出現(xiàn)多少次數(shù)货矮。{0,3}表示M可以出現(xiàn)0羊精,1,2,3次喧锦。如果是{3}那就是exactly3次
    \d{3} 為任何一個(gè)數(shù)字(0到9)读规,出現(xiàn)3次
    e.g. 3
    pattern = '^\d{3}\D+(cd|df)\D*(cd)$'
    \D為任何一個(gè)不是數(shù)字(不是0到9的字符,比方說(shuō)字母或者符號(hào))的字符燃少。+一個(gè)或者多個(gè)束亏。*0個(gè)或者多個(gè)。所以\D+可以用于匹配連接符號(hào)等阵具。\D*可以用于匹配沒(méi)有或有連接符碍遍。
    e.g. 4
    如下所示:.groups().group()的差別。.groups()返回一個(gè)tuple, 里面是與pattern里所有()匹配上的東西阳液。pattern里有多少個(gè)()這里tuple里就有多少個(gè)元素怕敬。

    e.g. 5
    如下所示:r'string'的意思為“raw string”, 即一些符號(hào)如換行符帘皿,tab符都會(huì)被當(dāng)作string來(lái)對(duì)待东跪。在pattern去掉了^,表明(\d{3})不一定是一個(gè)字符串的開(kāi)頭鹰溜,中間開(kāi)始也算數(shù)虽填。(...用'''XXX'''沒(méi)有什么意義,只是試一下而已曹动。)

e.g. 6
在Verbose正則中卤唉,可以忽略空格換行tab及注釋,從而讓正則可讀性更強(qiáng)仁期。如下所示桑驱。string的多行輸入用'''XXX'''。但是一定要在pattern中指定re.VERBOSE跛蛋。使用re.compile()把這些信息整合起來(lái)熬的。


e.g. 7
re.sub的用法:re.sub('要換掉的字符','要換成的字符'赊级, '字符串')將字符串指定的部分替換掉押框。它會(huì)替換掉字符串中所有匹配到的字符。
一個(gè)注意
^[]``^[]外的時(shí)候理逊,為“以...為開(kāi)頭”的意思橡伞;
[^] ^[]內(nèi)時(shí),為排除的意思晋被。[^abc]即除了abc以外的任何一個(gè)字符兑徘。

>>> import re
>>> test = 'bus'
>>> test
'bus'
>>> re.search('[sxz]$',test) # []為[]中任意一個(gè)字符,即以x或s或z結(jié)尾的詞
<_sre.SRE_Match object at 0x0000000003D1E988>
>>> re.sub('$', 'es', test)
'buses'
>>> re.sub('[abc]', 'o', 'aaabbbccc9999')
'ooooooooo9999'

>>> pattern = '[^abc]N$'  # N前面那一個(gè)字符羡洛,需要是除了abc以外任何一個(gè)字符
>>> re.search(pattern, 'oooN')
<_sre.SRE_Match object at 0x0000000003D1E9F0>
  1. 獲取一個(gè)array/list/字符串中每個(gè)element的Index
    enumerate():枚舉挂脑,數(shù)數(shù)。如果是重復(fù)出現(xiàn)的elements,可以給出多個(gè)index
    好用崭闲!
for i,j in enumerate(['a','b','c','d']):
  print [i,j]

[i for i,j in enumerate(['a','b','c','d','d']) if j == 'd']
  1. ipython里的magic commands
In [1]: %history -n 1-4
In [2]: %run yourscript.py
In [3]: %cpaste 

%history在ipython中查看歷史命令肋联,-n 1-4是看前4個(gè)
%run 在ipython中運(yùn)行腳本。運(yùn)行后腳本中定義的函數(shù)都會(huì)被記錄在環(huán)境中刁俭。
在ipython中復(fù)制多行代碼會(huì)有tab的問(wèn)題橄仍,一個(gè)一個(gè)手動(dòng)修改很麻煩,使用%cpaste可以復(fù)制粘貼的時(shí)候自動(dòng)正確縮進(jìn)牍戚。且可以粘貼多個(gè)代碼塊侮繁。在末尾打--回車,即完成粘貼并運(yùn)行

  1. .unique()
    用于Serise翘魄,相當(dāng)于set(df['colname'])只是其output為一個(gè)array,而不是set

  2. pandas格式的數(shù)據(jù)中檢查缺失值
    .isnull(), .notnull(), .dropna(), .fillna()
    df.isnull().any() 看dataframe中每一列是否存在缺失值鼎天。
    df.dropna(axis=..., thresh=) 去除含有缺失值的整行或整列舀奶,可以設(shè)置留下最少多少個(gè)NA的行/列
    df.fillna(0) 缺失值都填充為0

  3. ['a', 'b', 'c', 'c', 'd'...]中'c'的個(gè)數(shù)暑竟,即計(jì)數(shù)一個(gè)List中各個(gè)element的counts數(shù)目
    list.count(element)比方說(shuō)list.count('c')
    如果帶有條件的計(jì)數(shù),比方說(shuō)所有大于2的elements:
    sum(1 for i in test if i > 2) sum()里是1S住5纭!相當(dāng)于計(jì)數(shù)涧至。

  4. 根據(jù)一個(gè)dictionary腹躁,使用map()給一個(gè)dataframe添加一列。
    比方說(shuō):

df = pd.DataFrame(np.random.randint(40,size=(3,4)),index=['a','b','c'],columns=['col'+ str(i) for i in range(0,4)])
df = df.reset_index()
print df
  index  col0  col1  col2  col3
0     a    14    18    39     1
1     b     9     4    10    16
2     c    11     9    30    33
# 根據(jù){'a':'A','b':'B','c':'C'},給df添一列
dic = {'a':'A','b':'B','c':'C'}
df['new'] = df['index'].map(dic)
print df
 index  col0  col1  col2  col3 new
0     a    14    18    39     1   A
1     b     9     4    10    16   B
2     c    11     9    30    33   C

如果是將一列轉(zhuǎn)化為二分類變量南蓬,則
可以使用df['new'] = df.eval("col1 <5 and col2>5")
df['new'] = np.where(df.eval("col1 <5 and col2>5"), 'positive', 'negative')

  1. range(1,n)轉(zhuǎn)化為['d001', 'd002', 'd003',...'d00n-1']
test = []
for i in range(1,6):
 test.append("{0}{1:03}".format('d',i))
print test
['d001', 'd002', 'd003', 'd004', 'd005']
  1. 對(duì)一個(gè)dataframe的每行遍歷
print df
 index  col0  col1  col2  col3 new
0     a    14    18    39     1   A
1     b     9     4    10    16   B
2     c    11     9    30    33   C
for ind, row in df.iterrows():
  print {ind:(row['col0'], row['new'])}  # ind 就是每行的index, row就是每行的內(nèi)容纺非,可以用row['colname']來(lái)選取每行的哪一列
{'a': (14, 'A')}
{'b': (9, 'B')}
{'c': (11, 'C')}
  1. dataframe中判斷一列是否有重復(fù)
    df.index.is_unique
    df['colname'].is_unique
    返回True/False

  2. .isin()選擇一個(gè)col中的value,都在一個(gè)List中的行
    ...甚為繞口赘方,舉個(gè)例子:

In [6]: df
Out[6]:
   value1  value2  value3   class
a      66      54      53  class1
b      91      21      35  class1
c      75      34      68  class2
d      31      50      31  class2
e      77      28      49  class3
In [8]: se = ['class1','class2']

In [9]: se
Out[9]: ['class1', 'class2']

In [10]: df.loc[df['class'].isin(se),:]
Out[10]:
   value1  value2  value3   class
a      66      54      53  class1
b      91      21      35  class1
c      75      34      68  class2
d      31      50      31  class2
  1. groupby
    按照某列分組求和: df.groupby(['colname']).sum()
    每列求和(整列相加): df.sum(axis=0)
    每行求和(整行相加): df.sum(axis=1)
    按照index來(lái)drop掉特殊的一行:df = df.drop('index_name')

  2. 把內(nèi)容一行一行的寫(xiě)到某個(gè)文件里(...早就該記住了)

test = ["a","b","c"]     
with open("XXXX.txt","w") as f1:
    for i in range(0,len(test)+1):
      f1.write(str(i) + "," + ",".join(test) + '\n')
# 得到XXXX.txt:
0,a,b,c
1,a,b,c
2,a,b,c
3,a,b,c

  1. 快速把一個(gè)數(shù)據(jù)集隨機(jī)分成1/4烧颖,3/4兩個(gè)部分,用于指定訓(xùn)練集和測(cè)試集
    df['is_train'] = np.randomuniform(0,1,len(df)) <= .75

  2. dictionary.get(key,[])
    通過(guò)給定key來(lái)獲取values, 如果給出的key不存在窄陡,則用[]中的表示

  3. 在用于List時(shí)炕淮,append和extend的區(qū)別

a = ['a', 'b']
a.append(['c', 'd'])
print a # 得到 ['a', 'b', ['c', 'd']]
a.extend(['c', 'd'])
print a # 得到['a', 'b', 'c', 'd']
  1. filter rows: col列中每行中包含指定string則filter出來(lái)
    df[df['col'].str.contains('string')]
    有可能因?yàn)?code>df['col']中含有NA值報(bào)錯(cuò),則先去掉df['col']中的NA行:
    df = df[df['col'].notnull()]

  2. 在win10(pycharm)上使用matplotlib出現(xiàn)的一個(gè)問(wèn)題
    使用seaborn和matplotlib可能會(huì)出現(xiàn)以下報(bào)錯(cuò):
    RuntimeError: Cannot get window extent w/o renderer
    需要check一下backend:
    print matplotlib.get_backend()
    如果不是'agg'跳夭,則加上:matplotlib.use('agg')
    'agg'后臺(tái)似乎不能把圖片show出來(lái)涂圆,直接保存就好。
    雖然這好像是個(gè)matplotlib在Mac OS X系統(tǒng)上的bug币叹,我這邊用win10也有润歉。
    參考:
    https://github.com/mwaskom/seaborn/issues/545
    https://github.com/matplotlib/matplotlib/issues/10874

  3. 在pycharm里切換python2和python3
    File ----> Settings ----> project interpreter的選擇條 ----> 選擇你要的version
    如果你要的version不在里面,比如python3, 在終端里輸入which python3 找到它的安裝目錄颈抚,然后點(diǎn)擊選擇條旁邊的設(shè)置按鈕(那個(gè)小齒輪)卡辰,選擇add Local找到安裝目錄下你要的python版本, apply即可。

  4. 你安裝了pip3, 基于python3的九妈。但是pip3 --version顯示是基于python2.7的反砌。
    可以每次使用Pip的時(shí)候都這樣:
    python3.5 -m pip ...
    ....不利索的解決辦法,也是解決辦法萌朱。

  5. pandas讀excel(這么簡(jiǎn)單的東西不要再忘了好嗎)
    pd.read_excel(infilepath, sheet_name='XXX'...)

  6. pandas: 把categorical的column轉(zhuǎn)化為多列的one-hot-encoding

import pandas as pd
df['category'] = pd.Categorical(df['category'])
dummy_df = pd.get_dummies(df['category'], prefix = 'category_前綴')
# dummy_df就是category轉(zhuǎn)化為one-hot-encoding后的結(jié)果
  1. argparse參數(shù)解析
    以后再忘記宴树,直接用這個(gè)照葫蘆畫(huà)瓢。
# 保存這個(gè)腳本為test_arg.py
import argparse
import numpy as np
import os
import pandas as pd
# 做一個(gè)這樣的dataframe, 將其某一列抽出來(lái)存為ttt.csv
# df = pd.DataFrame(np.random.randint(40, size=(3,4)),
#                   index=['a', 'b', 'c'],
#                   columns=['col1','col2','col3','col4'])

def test_fun(df, colname, path):
    df = pd.read_csv(df)
    df[colname].to_csv(os.path.join(path, 'ttt.csv'))

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-i', dest='df', required=True)
    parser.add_argument('-col', dest='column', required=True)
    parser.add_argument('-o', dest='path')
    args = parser.parse_args()
    # 在terminal中我們要傳3個(gè)參數(shù)晶疼,-i的df酒贬, -col的column name,以及-o的output path
    df = args.df
    column = args.column
    path = args.path
    test_fun(df=df, colname=column, path=path)
#在終端這么用:
$ python3.5 test_arg.py -i XXXX.csv -col 'col2' -o 'usrname/Desktop'
  1. jupyter-lab(或者notebook)報(bào)錯(cuò)--NotebookApp.iopub_data_rate_limitIOPub data rate exceeded
    在命令行中:
    $ jupyter-lab --LabApp.iopub_data_rate_limit=2147483647
    是jupyter notebook則
    $ jupyter notebook --NotebookApp.iopub_data_rate_limit=2147483647

  2. to_csv()保存內(nèi)容中有中文翠霍,出現(xiàn)亂碼
    試試XX.to_csv(encoding='utf-8')
    不行再試試XX.to_csv(encoding='utf_8_sig')

  3. jupyter-lab里用Plotly畫(huà)圖報(bào)錯(cuò):No renderer could be found for output. It has the following MIME types: application/vnd.plotly.v1+json 锭吨,沒(méi)有圖顯示
    參考這里,需要安裝一些JupyterLab Support

  4. python2和python3的一些區(qū)別

  1. df.query()
    查詢:行使一個(gè)filter的功能寒匙。格式是:
    df.query("colname == 'value' and colname2 == 'value2'")
    注意colname中不可以用空格

  2. 把dataframe的colnames中的空格換成“_”
    df.columns = df.columns.str.replace(' ', '_')

  3. df.groupby('colname').size()來(lái)計(jì)數(shù)多分類變量的value頻率

df = pd.DataFrame({'a' : ['u','l','y','y'],'b' : ['u','u','l','y'],'c':['l','y','u','y']})
df
   a  b  c
0  u  u  l
1  l  u  y
2  y  l  u
3  y  y  y

df.groupby('a').size()
a
l    1
u    1
y    2
dtype: int64

df.groupby('a').size()['y']
2
  1. 記一個(gè)Pands導(dǎo)入數(shù)據(jù)的坑:
    我們有一份數(shù)據(jù)大概是這樣的:
    samples-ID是列(有重復(fù)ID)零如,行是features

導(dǎo)入的時(shí)候:
test = pd.read_excel("c:/Users/XXX/Desktop/test_file.xlsx",sheet_name='Sheet1')


要小心如果導(dǎo)入的數(shù)據(jù)列有重復(fù)名,pandas會(huì)自動(dòng)給加上.1 .2等標(biāo)記以區(qū)別锄弱。導(dǎo)入數(shù)據(jù)行有重復(fù)名則不會(huì)考蕾。pandas要求列名必須是唯一的。

  1. 在python3里運(yùn)行python2的腳本
    比方說(shuō)你要把lefse的步驟整成一個(gè)Python3的腳本会宪,但是lefse是python2寫(xiě)的肖卧。比方說(shuō)如下所示,format_input.py是python2的腳本掸鹅。
    shell = True相當(dāng)于獨(dú)立一個(gè)shell窗口運(yùn)行python3cmd塞帐。如果沒(méi)有的話可能會(huì)調(diào)用到什么奇怪的地方。
    另外最好把python的絕對(duì)路徑寫(xiě)明巍沙。
import subprocess
python3cmd = '/user/bin/python format_input.py prepared.csv prepared.in -c 2 -u 1'
subprocess.Popen(python3cmd, shell=True)

如果中間有output,則

proce = subprocess.Popen(python3cmd, shell=True, stdout=subprocess.PIPE)
output = proce.communicate()
print(output) 

如果有一系列腳本需要運(yùn)行:

cmd1 = 'XXX.py  -in  XXX.csv  -o  XXX.txt'
cmd2 = 'XXXX.py -in XXX.txt  -o XXX.pdf'
cmd3 = 'XX.py -in XXX.txt -o XXX_1.pdf'
cmd = ';'.join([cmd1, cmd2, cmd3])  
process = subproess.Popen(cmd, stdout=subprocess.PIPE, ...) # 不用split出來(lái)

參考鏈接:
https://blog.csdn.net/bcfdsagbfcisbg/article/details/78134172

  1. 記一個(gè)小坑
    linux系統(tǒng)上有python2也有python3, 試圖在在Python2.7里安裝rpy2模塊葵姥,反復(fù)報(bào)錯(cuò)
    ERROR: Command "python setup.py egg_info" failed with error code 1 in...
    參考https://github.com/facebook/prophet/issues/418
    更新pip2
    sudo python2 -m pip install --upgrade pip
    更新setuptools
    sudo python2 -m pip install --upgrade setuptools
    指定rpy2的版本pip
    sudo python2 -m pip install rpy2==2.8.6

  2. 判斷一個(gè)file是否為空
    os.stat('file').st_size == 0

  3. 篩選某列非空/空的行
    df[df['col'].notnull()]
    df[df['col'].isnull()]

47.python做correlation

from scipy.stats.stats import pearsonr
# from scipy.stats.stats import spearmanr 或者spearman系數(shù)
pearsonr(list1, list2)
# 返回一個(gè)tuple: (r,p)
  1. 去除加和為0的行/列
    df.sum(axis=1) != 0)即去掉加和為0的行,下同:
    df.loc[(df.sum(axis=1) != 0), (df.sum(axis=0) != 0)]

  2. 在Python里fdr矯正P值

from statsmodels.stats.multitest import fdrcorrection
a_list_of_p = [0.5,0.000000000001,0.000000000009,0.05,0.000003,0.4] # 你要矯正的P值
fdrcorrection(a_list_of_p)
# 得到:
(array([False,  True,  True, False,  True, False]),
 array([5.0e-01, 6.0e-12, 2.7e-11, 7.5e-02, 6.0e-06, 4.8e-01]))

  1. 將一個(gè)flat list(一維List) 轉(zhuǎn)化為 list of lists; 將list of lists 轉(zhuǎn)化為flat list
import itertools
# 把list of lists 合并為 flat list
itertools.chain.from_iterable(list_of_lists)

# 把flat list 拆成一行n個(gè)的list of lists
zip(*[iter(flat_list)] * n)
  1. 一個(gè)查漏補(bǔ)缺:tuple, list 和 set的異同
    list: [] elements有序可index赎瞎,可改寫(xiě)牌里,
    tuple: () elements有序可index, 不可改寫(xiě)
    set: {} elements無(wú)序不可index, 可改寫(xiě),只包含不重復(fù)的elements

  2. list[::2]間隔2個(gè)elements
    A = [1,2,3,4,5,6]
    A[::2] # [1,3,5]

  3. sort list
    B = [2,3,4,1,6]
    sorted(B) # [1,2,3,4,6]
    或者
    B.sort()
    print(B)

  4. zip(*iterablelist)

S = ['cba','daf','ghi']
for col in zip(*S):
    print(col)
# got:
('c', 'd', 'g')
('b', 'a', 'h')
('a', 'f', 'i')

或者不用iteration:

A = ['abfc','sdtf','dfoe']
 for i in range(len(A[0])):
       col = [A[j][i] for j in range(len(A))]
       print(col)
# [['a', 's', 'd'], 
# ['b', 'd', 'f'], 
# ['f', 't', 'o'], 
# ['c', 'f', 'e']]
  1. collections.Counter
    collections是python build-in的模塊
arr1 = [2, 3, 1, 3, 2, 4, 6, 7, 9, 2, 19]
collections.Counter(arr1)
# 返回一個(gè)字典务甥,key為list中不重復(fù)的各elements, value為其計(jì)數(shù)
# Counter({2: 3, 3: 2, 1: 1, 4: 1, 6: 1, 7: 1, 9: 1, 19: 1})
collections.Counter(arr1)[20]
# 返回0牡辽, 因?yàn)檫@里面20的count是0. 不會(huì)像普通字典那樣,沒(méi)有key則會(huì)報(bào)錯(cuò)
  1. 給定年月日信息敞临,查是星期幾态辛?
import datetime
we = datetime.datetime(year,month,day).weekday()
we_day =  ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday","Sunday"][we]
  1. 生成26個(gè)字母:
    [chr(ord('a')+i) for i in range(26)]

  2. 找多個(gè)字典的intersection
    即k,v均相同的對(duì)子

a_list =  [{'c': 1, 'o': 2, 'l': 1},
           {'l': 1, 'o': 1, 'c': 1, 'k': 1},
           {'c': 1, 'o': 2, 'k': 1}]
dict(set.intersection(*(set(d.items()) for d in a_list)))
  1. 比如一個(gè)fasta文件,讀取某一行的后N行
with open('XX/XX/XX.txt') as f:
  for line in f:
    if line.startswith('>'):
      print([next(f) for index in range(N)])
  1. apply lambda x:不要再忘了
    df['newcol'] = df['col'].apply(x: 'value if condition met' if x condition else 'value if condition not met')

  2. with open fastq.gz 文件挺尿,一頓操作之后保存成 .fastq
    在操作的時(shí)候要注意bytes和string之間的轉(zhuǎn)化
    有空去找找怎么直接對(duì).gz操作奏黑,保存成.gz!
    bytes objdect: b'XXX'
    string to bytes: XXX.encode()
    bytes to strint: XXX.decode()

test_in = 'XXX.fastq.gz'
test_out = 'XXX.fastq'
barcode_list = ['ATGCTC','ATCCGT'....]
with gzip.open(test_in, 'rb') as f, open(test_out, 'w') as data_out:  
    #..就算'rb'換成'r'都是以bytes形式打開(kāi)炊邦,因?yàn)間zip.open打開(kāi)后就是一個(gè)二進(jìn)制的文件
    for line in f:
        line = line.decode()
        if line.startswith("@HWI"):
            seqs = next(f).decode()  #注意.decode(),這里將bytes轉(zhuǎn)化為string
            sign = next(f).decode()
            quality = next(f).decode()
            for i in barcode_list:
                if i in seq:
                    seq = i + seq.split(i)[1]
        data_out.write("{}{}{}{}".format(line,seq,sign,quality))

如果要write到.gz文件熟史,則:

data_out = 'XXXX.fastq.gz'
with open(test_out,'wt') as data_out:
    data_out.write("XXXXXXX")   # "XXXXXXXX"是string就可以
  1. 通過(guò)絕對(duì)路徑來(lái)import模塊
import sys
sys.path.append('XX/XXX/XXX/XXXX')
from XXXX.XX import any_function
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末馁害,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蹂匹,更是在濱河造成了極大的恐慌碘菜,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件限寞,死亡現(xiàn)場(chǎng)離奇詭異忍啸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)履植,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)计雌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人玫霎,你說(shuō)我怎么就攤上這事凿滤。” “怎么了鼠渺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵鸭巴,是天一觀的道長(zhǎng)眷细。 經(jīng)常有香客問(wèn)我拦盹,道長(zhǎng),這世上最難降的妖魔是什么溪椎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任普舆,我火速辦了婚禮,結(jié)果婚禮上校读,老公的妹妹穿的比我還像新娘沼侣。我一直安慰自己,他們只是感情好歉秫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布蛾洛。 她就那樣靜靜地躺著,像睡著了一般雁芙。 火紅的嫁衣襯著肌膚如雪轧膘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天兔甘,我揣著相機(jī)與錄音谎碍,去河邊找鬼。 笑死洞焙,一個(gè)胖子當(dāng)著我的面吹牛蟆淀,可吹牛的內(nèi)容都是我干的拯啦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼熔任,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼褒链!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起疑苔,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤碱蒙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后夯巷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赛惩,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年趁餐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喷兼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡后雷,死狀恐怖季惯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情臀突,我是刑警寧澤勉抓,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站候学,受9級(jí)特大地震影響藕筋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梳码,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一隐圾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掰茶,春花似錦暇藏、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至沪伙,卻和暖如春瓮顽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背焰坪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工趣倾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人某饰。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓儒恋,卻偏偏與公主長(zhǎng)得像善绎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子诫尽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容