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)
网友评论