美文网首页
2019-04-02--window 下练习python

2019-04-02--window 下练习python

作者: 生信小白2018 | 来源:发表于2019-04-24 11:37 被阅读0次

    window 下练习python

    import os
    
    os.getcwd()
    
    os.chdir('G:\\code\\Python')
    
    os.listdir()
    
    f=open('sum100' , 'r')
    
    f.read()
    
    f.close()
    

    按行读取文件:

    
    with open('test.txt') as file:
    
        for line in file.readlines():
    
            print(line.strip())
    
    
    with open('test.txt') as file:
    
        for line in file:
    
            print(line.strip())
    

    同时把读入的文件写入另一文件

    with open('test.txt') as file, open('testw.txt','w') as outfile:
    
        for line in file:
    
            print(line.strip())
    
            outfile.write(line.upper())
    

    由于Python写入文件时,并不是立即将数据写入硬盘中,而是在内存中缓存起来,等close()后再把缓存的数据写入硬盘中,最后关闭文件;如果想写入一次就保存一次(以防程序崩溃导致数据丢失),可以使用flush()函数: Python 文件 flush() 方法是用来把文件从内存buffer(缓冲区)中强制刷新到硬盘中,同时清空缓冲区

    with open('test.txt') as file, open('testw.txt','w') as outfile:
    
        for line in file:
    
            outfile.write(line.upper())
    
            outfile.flush()
    

    参考http://www.bioinfo-scrounger.com 转载请注明出处

    字符串操作

    Python将字符串、列表和元组都当做序列,因此可对序列操作的函数都适用于以上三者

    可以在切片中加上第三个参数即步长

    "Hello"[1:4:2]

    运算符in也可以在字符串中使用,判断某个字符是否在字符串中

    'H' in 'Hello'

    字符串操作函数

    string.upper(); string.lower()    大小写转化
    
    string.count()    统计    
    
    string.find();string.index()    索引
    
    string.join(); string.split()    合并与分开
    
    string.replace()    替换
    
    string.startwith()    是否以...为开头
    
    string.translate()    正则转化
    

    列表操作

    Python里创建变量时不需要指定类型,因此创建列表只要list = []即可,整体上与Perl的数组同一个用法,不外乎索引、切片以增加/删除列表元素等方法

    主要几个常用函数:list(); len(); max(); min()

    列表方法: list.append(); list.extend(); list.index(); list.insert(); list.pop(); list.count(); list.remove(); list.sort/reverve(); list.copy(); list.clear()

    list.append(),将元素添加到末尾list.append("Hello"),类似于Perl的push,很常用
    
    list.extend(),将多个元素(列表)附件到末尾list.extend([1,2,3])
    
    list.index(),查找特定值第一次出现的索引list.index("Hello")
    
    list.insert(),将元素插入列表list.insert(1, "Hello"),类似于Perl的splice
    
    list.pop(),从列表中取出一个元素x = list.pop(0),默认是最后一个元素,也可以指定元素位置,相比Perl的pop方法,似乎更加方便了点
    
    list.count(),统计元素出现次数list.count("Hello")
    
    list.remove(),删除特定值(第一个出现的)list.remove("Hello")
    
    list.sort/reverse(),前者排序(直接改变原列表),reverse参数TRUE表示降序,参数cmp可指定用于排序的函数;后者则是反向序列
    
    list.copy(),复制列表(而不是单纯的列表赋值)
    
    list.clear(),清空列表
    

    通过表达式(推导式)的方法从序列创建你想要的列表/元组,一般接在for/if语句

    vec = [2, 4, 6]

    [3*x for x in vec if x > 3]

    字典

    Python的字典相当于Perl的哈希,键与值之间以冒号分隔,{}创建字典,或者用dict()函数将键-值对序列转化为字典

    items = [("a", "aaa"), ("b", "bbb")]
    
    d = dict(items)
    
    **len(d); d[k];del d[k]; k in d; str(d)**
    
    len(d),返回键-值的数目
    
    d[k],返回键K对应的值(跟Perl的表达式不一样),d[k] = v,将键k的值为v,可当做更改,也可当做赋值
    
    del d[k],删除键k的键-值对
    
    k in d,查看k是否在d字典的键中(而Perl中一般用匿名哈希来判断键是否存在)
    
    str(d),输出可打印的字典字符串表
    

    字典常用方法:d.items(); d.keys(); d.get(); d.fromkeys(); d.clear(); d.copy()

    d.items(),返回键-值的列表(叫字典视图的特殊类型?),主要用于迭代吧,类似于:for key, value in d.items(): print(key, value)
    
    d.keys(),返回字典所有的键,返回的也是字典视图,也可以叫做迭代器?,主要还是用于for循环,list(d.keys());对应的还有d.values(),返回所有的键对应的值
    
    d.get(),返回指定键对应的值,如果键不存在则返回None(Perl的话直接访问键就行,键不存在的话也不会报错);类似的还有d.setdefault(),如果键不存在的话,可以指定键返回的值,相当于不返回None,当然如果键存在的话,就返回其对应的值
    
    d.fromkeys(),以输出的序列为键创建一个新的字典,键返回值都是None
    
    d.clear(),清空字典
    
    d.copy(),浅复制,创建一个副本字典;当副本修改时,原本无变化,当原本修改时,副本也随之变化;为了避免以上问题,可以选择copy模块的深复制函数deepcopy(d)
    

    在列表中所示的表达式也可以适用于字典(用冒号分割即可):

    {x: x**2 for x in (2, 4, 6)}

    函数

    def func(x, y): 
    
     return x + y
    
    func(1,2)
    

    Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问

    如果函数中的变量想要修改作用于以外的变量时,需要用到global(如果是嵌套作用域以外的变量,则用nonlocal)

    num = 1
    
    def func():
    
        global num
    
        num = 123    
    
        print(num)
    
    func()
    

    name属性

    一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用name属性来使该程序块仅在该模块自身运行时执行。

    if __name__ == "__main__":
    
    #!/usr/bin/env python3        该行注释表示可以让这个hello.py文件直接在Unix/Linux/Mac上运行
    
    # -*- coding: utf-8 -*-         该行注释表示.py文件本身使用标准UTF-8编码
    
    __author__ ='Michael Liao'        把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名;
    

    面向对象

    对象指的是类的集合。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。

    实例

    1) vcf筛选**

    import sys,os
    
    def filter_vcf(infile, outfile):
    
        ini=open(infile,'r')
    
        out=open(outfile,'w')
    
        for i in ini:
    
            if i.startwith('#'):
    
                out.write(i)
    
            else:
    
                tmp = i.strip().split()
    
                outline='\t'.join(tmp[0:9])+ '\t'
    
                for j in tmp[9:]:
    
                    if j !='./.':
    
                        jtmp = j.split(':')
    
                        DP = int(jtmp[2])
    
                        GT = jtmp[0]
    
                        if (GT == '0/0' and DP < 4) or (GT == '0/1' and DP < 3) or (GT == '1/1' and DP < 2)
    
                            outline = outline + '\t' + './.'
    
                        else:
    
                            outline = outline + '\t' +j
    
                    else:
    
                        outline = outline + '\t' +j
    
                out.write(outline + '\n')
    
        out.close()
    
    if __name__=="__main__":
    
        infile = sys.argv[1]
    
        outfile = sys.argv[2]
    
        fileter_vcf(infile,outfile)
    

    相关文章

      网友评论

          本文标题:2019-04-02--window 下练习python

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