python3¶
教程¶
读取文件¶
f = open("read.txt", "r") # 文本模式 f = open("read.txt", "r", encoding = "utf-8") # 读文件的时候注意编码方式, #python默认是unicode编码,但是读取的文件如有一些中文空格、横杠、希腊字母的 #时候会报错。在web开发中统一使用utf-8编码方式最好,因为绝大多数浏览器默认都是utf-8编码 f = open("read.txt", "rb") # 二进制模式 whole_file = f.read() # 读取整个文件 first_line = f.readline() # 读取一行 lines = f.readlines() # 读取文件到一个列表 f.close() # 关闭文件
列出目录¶
samples = {f[:-11] for f in os.listdir("bam_data") if f.endswith(".sorted.bam")} list(samples_old)[0] # 每次结果是随机的
写文件¶
f = open("write", "w") # 文本模式 f = open("write", "wb") # 二进制模式
去掉字符串前后的空白字符¶
tmp_str = ' a b ' str = str.strip() # 读取文件的时候进行此操作,好处太多了, 比如中文的特殊字符在linux或者后续处理名字不匹配
判断字符串的起始和结尾¶
str.startswith('+-') # 起始 str.endswith('+-') # 结尾 # 如果你想检查多种匹配可能,只需要将所有的匹配项放入到一个元组中去, 然后传给 startswith() 或者 endswith() 方法: for i in cancer_related_lncRNA_df.index: for hallmark in cancer_hallmarks: cell_val = cancer_related_lncRNA_df[hallmark][i] cell_val.strip() if cell_val.startswith(('+', '-')): print(cell_val, "yes") break
分割字符串, 和连接字符串¶
# 分割 tmp_str = 'a b c d' strlist = str.split(' ') # 连接 tmp_list = ['a', '1', 'b'] tmp_str = ' '.join(tmp_list) # 字符串是一个对象,这里比较想对对象进行操作 # python中字符串自带的split方法一次只能使用一个字符对字符串进行分割,但是python的正则模块则可以实现多个字符分割 import re re.split('[_#|]','this_is#a|test') # 返回的是一个列表(list),输出结果如下: ['this', 'is', 'a', 'test']
对文件地址的操作os.path¶
import os current_path = os.getcwd() base_path = os.path.dirname(current_path) lncrna_glist_filename = "fish.txt" file_path = os.path.join(base_path, "Tempresult", lncrna_glist_filename)
与os.path配合新建文件夹¶
# path = 文件路径 os.path.exists(path) # 判断文件是否存在 os.path.join('/home', 'zhangxuan', 'Project', 'readme.txt') # 文件路径连接 os.makedirs('文件夹名', exist_ok = True) # 新建文件夹,如果已经存在exist_ok = True不会报错
格式化字符串¶
# 对字符串的使用,主要不要使用关键字,比如str是python3中的一个函数 tmp_str = "这是第一个参数param1 = {}; 这是第二个参数param2 = {}".format(param1, param2) # 保留有效字符如何操作?等后续碰到之后添加 # put code here
字典dict(哈希hash)的使用¶
# 一维字典 fasta_sequence = dict() # 定义 fasta_sequence['gene1'] = 'ATGC' fasta_sequence['gene2'] = 'ATGC' # result: {'gene1': 'ATGC', 'gene2': 'ATGC'} # 二维字典 fasta_sequence['gene1']['gene2'] = 'ATGC' # 二维字典不能直接赋值 # 上面的代码会出现这种错误:TypeError: 'str' object does not support item assignment # 应该这样创建python二维哈希(字典) fasta_sequence = dict() fasta_sequence.setdefault('gene1', {}) fasta_sequence['gene1']['gene2'] = 'ATGC' result: {'gene1': {'gene2': 'a'}} # 字典输出是按key或者value排序python3, 这个sorted只能按照字符排序?怎么按照数值排序? >> dic {'a':3 , 'b':2 , 'c': 1} >> sorted(dic.items(), key=lambda x:x[0], reverse=True) # 按照第0个元素降序排列 [('c', 1), ('b', 2), ('a', 3)] >> sorted(dic.items(), key=lambda x:x[0], reverse=False) # 按照第0个元素升序排列 [('a', 3), ('b', 2), ('c', 1)] >> sorted(dic.items(), key=lambda x:x[1], reverse=True) # 按照第1个元素降序排列 [('a', 3), ('b', 2), ('c', 1)] >> sorted(dic.items(), key=lambda x:x[1], reverse=False) # 按照第1个元素降序排列 [('c', 1), ('b', 2), ('a', 3)]
python有序hash¶
from collect import sortdict
lambda函数的使用¶
gene_list = [' gene1', 'gene2 '] map_object = map(lambda x:x.strip(), gene_list) # 这里返回的是一个map对象, 要转变成list才好用 gene_new_list = list(map_object) # 这里有个例子:把列表所有的元素变成字符串类型 tmp_list = ['str1', 123] tmp_str_list = list(map(str, tmp_list))
高级列表操作¶
import os files = os.listdir() names = [f.strip() for f in files]
统计列表中元素出现的次数¶
from collections import Counter values = ['zhangsan','lisi','lisi','wangwu','wangwu','lisi','zhangsan','zhangsan','zhangsan','zhangsan','mazi','mazi','wangwu','wangwu','mazi', 'lisi','mazi','mazi','mazi', 'wangwu','mazi',] values_counts = Counter(values) top_2 = values_counts.most_common(2) print(top_2)
各种类型转换¶
num = '123' tmp_str = str(num) # 数值类型换字符串类型 tmp_chr = 'abc' tmp_upper_chr = tmp_chr.upper() # 字符串大写转换成小写 tmp_upper_chr = tmp_upper_chr.lower() # 字符串小写转换成大写 num = list(range(97,123)) alphabet = list(map(chr,num)) # chr函数把数值转换成字符 lower_str = "".join(alphabet) upper_str = lower_str.upper() upper_str = upper_str + "0123456789"
try except¶
try: value = fasta[key] except Keyerror: print('key error!') break else: print('key exists!')
json¶
import json data = { 'name': 'zhangxuan', 'height': '162', 'age': '28' } json_str = json.dumps(data) # Python数据结构转换成JSON data1 = json.loads(json_str) # JSON编码的字符串转换成Python数据结构 # 如果处理的是文件 # Writing JSON data with open('data.json', 'w') as f: json.dump(data, f) # Reading data back with open('data.json', 'r') as f: data = json.load(f)
排序¶
# 列表排序 b = ['b', 'a'] b.sort() b -> ['a', 'b'] # 字典输出排序
logging包¶
# ---------------------------------- import logging log = logging.getLogger(__name__) log.critical('Host %s unknown', hostname) log.error("Couldn't find %r", item) log.warning('Feature is deprecated') log.info('Opening file %r, mode=%r', filename, mode) log.debug('Got here') # ----------------------------------
虚拟环境,env¶
virtualenv
是一个创建隔绝的Python环境的工具。
通过pip3安装virtualenv(我想要python3的环境):
pip install virtualenv
测试你的安装
virtualenv --version
要开始使用虚拟环境,其需要被激活:
source my_project/bin/activate
如果你在虚拟环境中暂时完成了工作,则可以停用它:
deactivate
random¶
-
使用python random模块的choice方法随机选择某个元素
from random import choice foo = ['a', 'b', 'c', 'd', 'e'] choice(foo)
-
使用python random模块的sample函数从列表中随机选择一组元素
import random list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] slice = random.sample(list, 5) #从list中随机获取5个元素,作为一个片断返回 slice list #原有序列并没有改变。
pickle¶
import pprint, pickle pkl_file = open('data.pkl', 'rb') data1 = pickle.load(pkl_file) pprint.pprint(data1)
查看当前使用的python的包安装目录¶
import sys sys.path
sys 执行系统或shell命令¶
import sys sys.exec()
查看使用tempfile包, 创建的临时文件在电脑上的位置¶
import tempfile with tempfile.mkdirtempdir() as fp: fp.name()
spyder¶
删除所有变量: reset
+ y, 删除单个变量用右键
打开多个spyder: spyder --new-instance
Run a new instance of Spyder, even if the instance mode has been turned on (default)
集合set¶
A B 交集 A & B
A B 并集 A | B
A B 差集 A - B
匹配¶
import re