计划把每天学到的小知识记录下来,就这样吧
matlab:
如何加载.mat文件转换为矩阵形式
S1 = load('IntBP1.mat');
BP1 = struct2cell(S1);
Mymat1 = cell2mat(BP1);
save Mymat1.mat Mymat1 -MAT
Mymat1就是矩阵形式了(S1是Struct Array 形式)。
cell:创建空的元胞数组
cellfun:为元胞数组的每个元胞执行指定的函数
celldisp:显示所有元胞的内容
cellplot:利用图形方式显示元胞数组
cell2mat:将元胞数组转变成为普通的矩阵
mat2cell:将数值矩阵转变成为元胞数组
num2cell:将数值数组转变成为元胞数组
deal:将输入参数赋值给输出
cell2struct:将元胞数组转变成为结构
struct2cell:将结构转变为元胞数组
iscell:判断输入是否为元胞数组
爬虫:
如果爬取的是动态信息,比如需要加载,翻页等的信息,在Network中找对应的进行爬取,利用requests,bs4,json等库;如果爬取的是静态信息,如小说图片,则在Element中爬取,利用requests,bs4等库。
动态信息用requests.get爬到后得用json()方法将response对象变为列表/字典对象,再用取字典中的值的方法取出想要的信息。
requests库用来取得网址内容,返回response对象,可以用text方法提取到文字内容,也可以用content提取到二进制文件,如图片,音乐。
r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取
r.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
特殊方法#
r.json() #Requests中内置的JSON解码器
r.raise_for_status() #失败请求(非200响应)抛出异常
bs4.BeautifulSoup可以用来解析requests.get得到的网址,虽然和.text方法print出的内容看似一样,但他们的类不同,分别为<class 'str'> 与<class 'bs4.BeautifulSoup'>
import requests
from bs4 import BeautifulSoup
#引入BS库
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')
html = res.text
soup = BeautifulSoup(html,'html.parser') #把网页解析为BeautifulSoup对象,BeautifulSoup中的第0个元素必须是字符串类型,第1个元素是解析器
一个常用的headers
headers={'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
res=requests.get(url,headers=headers)
exec的用法
例子
x = 10
expr = """
z = 30
sum = x + y + z
print(sum)
"""
def func():
y = 20
exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
func()
-----------------输出为----------------
34
上面这一串相当于
x = 1
y = 2
def func():
y = 3
z = 4
z = 30
sum = x + y + z
print(sum)
func()
设计模式可以参考 https://blog.csdn.net/zhang1281480917/article/details/89530723
python的Template用法
- 字符串替换
template = "hello %s , your website is %s " % ("大CC","http://blog.me115.com")
print(template)
#等价于
template = "hello {0} , your website is {1} ".format("大CC","http://blog.me115.com")
print(template)
- 模板方式替换
from string import Template
tempTemplate = Template("Hello $name ,your website is $message") # 这种方式替换变量的标志为$
print(tempTemplate.substitute(name='大CC',message='http://blog.me115.com'))
# 使用字典方式替换
from string import Template
tempTemplate = Template("Hello $name ,your website is $message") # 这种方式替换变量的标志为$
a = {name:'大CC',message:'http://blog.me115.com'}
print(tempTemplate.substitute(a))
如果想换个替换方式的标志,比如从$换为!,可以这样
from string import Template
class MyTemplate(Template):
delimiter = "!"
tempTemplate = MyTemplate("Hello !name ,your website is !message") # 这种方式替换变量的标志为!
a = {name:'大CC',message:'http://blog.me115.com'}
print(tempTemplate.substitute(a))
jsonpath的使用
- jsonpath取值不需要查看json数据,直接通过..(..就表示全局检索后面跟的属性)
data2 = jsonpath.jsonpath(json_data, "$..uname") # 全局搜索uname属性,如果没有返回FALSE
print(data2)
- jsonpath是以列表的形式返回匹配到的值
repr和str区别
- 重构repr方法后,不管直接输出对象(面向开发者)还是通过print(面向用户),打印的信息都按我们repr方法中定义的格式进行显示
class Name:
def __init__(self,name):
self.name = name
def __repr__(self):
return 'Name: %s' % self.name
student = Name('jack')
student
print(student)
------------输出--------------
Name: jack
Name: jack
- 重构str后直接输出对象(面向开发者)显示对象的内存地址,使用print输入对象显示重构后的格式
class Name:
def __init__(self,name):
self.name = name
def __str__(self):
return 'Name: %s' % self.name
student = Name('jack')
student
print(student)
-------------------输出-------------------
<__main__.Name object at 0x0000020910CF0B20>
Name: jack
网友评论