美文网首页
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