程序调试技巧
导出程序依赖库
终端>pip freeze > requirements.txt
把终端打印的信息保存为日志文件
把这三行代码放在程序前
import sys
f_handler=open('out.log', 'w')
sys.stdout=f_handler
另一种方法 只是记录系统的运行信息
#日志
import logging
# 通过下面的方式进行简单配置输出方式与日志级别
logging.basicConfig(filename='logger.log', level=logging.INFO)
logging.info('info message')
设置路径
import os
path1=os.path.abspath('.') #表示当前所处的文件夹的绝对路径
path2=os.path.abspath('..') #表示当前所处的文件夹上一级文件夹的绝对路径
修改当前路径
(记得windows下 两个反斜杠”\")
import os
os.chdir("E:\\Academic\\Graduation thesis\\PSSP_experiment")
pwd
打印keras tensorflow版本信息
import keras
print(keras.__version__)
import tensorflow
print(tensorflow.__version__)
数据操作
多变量循环
for i,k in zip(OTC_simple,range(len(OTC_simple))):
if i !=0:
Non_zero_3[otc[k]]=i
numpy数组拼接方法concatenate介绍
>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0)
array([[1, 2],
[3, 4],
[5, 6]])
>>> np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],
[3, 4, 6]])
enumerate()
enumerate函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
for i, res in enumerate(seasons):
print((str(i+1)))
print((str(res)))
返回
1
Spring
2
Summer
3
Fall
4
Winter
rindex()
rindex() 返回子字符串 str 在字符串中最后出现的位置,
str1 = "this is string example....wow!!!";
str2 = "is";
print(str1.rindex(str2))
print(str1.index(str2))
5
2
map函数
在Python2中map函数会返回一个list列表,如代码:
def f(x, y):
return (x, y)
l1 = [ 0, 1, 2, 3, 4, 5, 6 ]
l2 = [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ]
返回结果如下:
>>> map(f, l1, l2)
[(0, 'Sun'), (1, 'Mon'), (2, 'Tue'), (3, 'Wed'), (4, 'Thu'), (5, 'Fri'), (6, 'Sat')]
但是,在Python3中返回结果如下:
>>> map(f1, l1, l2)
<map object at 0x00000000021DA860>
如果想要得到Python2的那种结果,即返回list列表,那么必须用list作用于map,如下:
>>> list(map(f1, l1, l2))
[(0, 'Sun'), (1, 'Mon'), (2, 'Tue'), (3, 'Wed'), (4, 'Thu'), (5, 'Fri'), (6, 'Sat')]
dir()
dir([object]) 会返回object所有有效的属性列表。
type()
type(object)返回对象object的类型。
import Bio
from Bio import SeqIO
record_dict = SeqIO.to_dict(SeqIO.parse("25PDB_A_fasta.txt","fasta"))
record_dict['1A1W:A|PDBID|CHAIN|SEQUENCE'].seq
Out[10]: Seq('MDPFLVLLHSVSSSLSSSELTELKYLCLGRVGKRKLERVQSGLDLFSMLLEQND...HHH', SingleLetterAlphabet())
hasattr()
hasattr(Object,“diaplay_name”)要判断对象是否有某个属性
多参数遍历
for (i,k) in zip(range(3),range(3)):
print(i,k)
index()方法
str.index(str, beg=0, end=len(string))
数据输入输出
在写入的TXT中换行
如果单纯的使用换行符\n不能起到作用可以试试在换行符前加\r
for line in words_list:
file.write(line+'\r\n')
codecs写入条件
|w|仅写,若文件已存在,内容将先被清空|
|a|仅写,若文件已存在,内容不会清空|
with codecs.open(path, 'a', encoding='utf-8') as file:
file.write(content)
将字符串写入文件中
with open('data.txt','w') as f: #设置文件对象
f.write(str)
Python 数据持久化方式----JSON与Pickle
比较:
JSON是文本形式的存储,Pickle则是二进制形式(至少常用二进制)
JSON是人可读的,Pickle不可读
JSON广泛应用于除Python外的其他领域,Pickle是Python独有的。
JSON只能dump一些python的内置对象,Pickle可以存储几乎所有对象。
json
import json
obj = {'a' : 'b', 'c' : 'd'}
fp = open('obj.json', 'w')
json.dump(obj, fp)
fp.close()
s = json.dumps(obj)
x = json.load(open('obj.json', 'r'))
y = json.loads(s)
json对象解析
将已编码的 JSON 字符串解码为 Python 对象
py_obj=json.loads(json_obj)
pickle
import pickle
with open( 'obj.pkl', "wb") as f:
pickle.dump(obj, f)
with open(pkl_file_name, "rb") as f:
data_obj=pickle.loads(f)
pkl文件正确打开方式
import pickle
with open('./Data/embedding/word2vec.pkl', 'wb') as file_w:
pickle.dump(word_dict, file_w)
print(file_w.name)
其他
词性标注:jieba.posseg.cut()
import jieba.posseg as pseg
words = pseg.cut("我爱北京天安门")
for word, flag in words:
print('%s, %s' % (word, flag))
我, r
爱, v
北京, ns
天安门, ns