Python
2020-12-14 14:58:59 1 举报
AI智能生成
登录查看完整内容
python
作者其他创作
大纲/内容
Python
Linux操作相关
文件与目录
相对路径和绝对路径 .表示当前目录 ..表示父目录
pwd
cd
cd - 快速回到上次的目录 cd ~ 回到home目录
ls
ls -lh ls *.txt
clear清屏
history历史命令
--help:ls --help
touch创建文件
权限rwx
分支主题
文件与磁盘管理
通配符
| #管道符,或者(正则)> #输出重定向>> #输出追加重定向< #输入重定向<< #追加输入重定向~ #当前用户家目录`` $() #引用命令被执行后的结果$ #以。。。结尾(正则)^ #以。。。开头(正则)* #匹配全部字符,通配符? #任意一个字符,通配符# #注释& #让程序或脚本切换到后台执行&& #并且 同时成立[] #表示一个范围(正则,通配符){} #产生一个序列(通配符). #当前目录的硬链接.. #上级目录的硬链接
more分屏显示
最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示 。
管道|
管道符左边命令的输出就会作为管道符右边命令的输入。 例:cat 1.txt | grep consists
重定向
>是重定向到一个文件,>>是追加内容到文件。两个命令都是如果文件不存在则创建文件
文本搜索:grep
grep一般格式为:grep [-选项] ‘搜索内容串’文件名
查看或者合并文件内容:cat
cat 1.txt 2.txt > 3.txt
查找文件:find
解压:tar
压缩打包:tar zxvf 压缩包包名。解压到指定目录:-C (大写字母“C”)
文件打包:tar使用格式 tar [参数] 打包文件名 文件参数 含义-c\t 生成档案文件,创建打包文件-v\t 列出归档解档的详细过程,显示进度-f\t 指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后-t\t 列出档案中包含的文件-x\t 解开档案文件
文件压缩解压:gzip
tar只负责打包文件,但不压缩,用gzip压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz。gzip使用格式如下:gzip [选项] 被压缩文件 常用选项:选项 \t含义-d \t 解压-r\t 压缩所有子目录
文件压缩解压:zip、unzip
通过zip压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。压缩文件:zip [-r] 目标文件(没有扩展名) 源文件解压文件:unzip -d 解压后目录文件 压缩文件
创建目录:mkdir
参数-p可递归创建目录。mkdir -p 创建目录,若无父目录,则创建父目录
删除目录:rmdir
必须离开目录,并且目录必须为空目录,不然提示删除失败。
删除文件或文件夹:rm
rm 文件夹名称 -r:删除非空文件夹
建立链接文件:ln
如果没有-s选项代表建立一个硬链接文件,两个文件占用相同大小的硬盘空间,即使删除了源文件,链接文件还是存在,所以-s选项是更常见的形式。使用格式:ln 源文件 链接文件【硬链接】ln -s 源文件 链接文件【软连接】
参考网站:https://www.cnblogs.com/luwenlong/articles/9025459.html
用户与权限管理
ssh:远程登录ssh python@192.168.17.76ssh 用户名@ip
Ubuntu的默认root密码是随机的,可以在终端输入命令 sudo passwd来修改root密码
useradd创建用户
设置用户密码:passwd 用户名
exit退出当前用户
useradd 用户名 -m:自动创建目录及用户
userdel -r 用户名:删除用户,包括目录
su切换用户
添加、删除组账号:groupadd、groupdel
使用用法:groupadd 新建组账号groupdel删除 组账号cat /etc/group 查看用户组
修改用户所在组:usermod
使用方法:usermod -g 目标用户组 当前用户名
修改文件权限:chmod
字母法:chmod u/g/o/a +/-/= rwx 文件
chmod o+w file 给文件file的其它用户增加写权限 chmod u-r file 给文件file的拥有者减去读的权限 chmod g=x file设置文件file的同组用户的权限为可执行,同时去除读、写权限
数字法:“rwx” 这些权限也可以用数字来代替
如果想递归所有目录加上相同权限,需要加上参数“ -R ”。 如:chmod 777 test/ -R 递归 test 目录下所有文件加 777 权限
修改文件所有者:chown
使用方法:chown 用户名 文件或文件夹
修改文件所属组:chgrp
使用方法:chgrp 用户名 文件或文件夹
系统管理
查看当前日历cal
显示或设置时间date
强制重启reboot -f
关机shutdown(选项)(参数)
查看进程信息【瞬间】 ps -aux
top 查看进程信息【动态】 按q退出
kill -9 进程号 强制终止进程
df -h 查看带有单位显示磁盘信息
编辑器与服务器
vim
x 应该是保存并退出 ,功能和:wq!相同
编辑模式
小i 行位置停止不动写入大I 行首写入小a 行当前字符后写入大A 行尾写入小o 下一行写入【另起一行】大O 上一行写入
镜像
源获取:https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/
更新apt-get update
sudo apt-get install/remove 安装或卸载软件名称
ftp服务器:文件传输协议
参考地址https://blog.csdn.net/qq_26442553/article/details/81411261
1安装:sudo apt-get install vsftpd2配置vsftpd.conf文件:sudo vi /etc/vsftpd.conf3重启服务:sudo /etc/init.d/vsftpd restart
lrzsz【windows和linux之间拷贝】
安装:sudo apt-get install lrzsz
rz(上传)、sz(下载)
ssh【linux服务器之间拷贝】
从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地目录)举例:scp ubuntu@134.175.71.163:/tmp/setRps.log /home/leejuny/
上传本地文件到服务器scp /path/filename username@servername:/path
从服务器下载整个目录scp -r username@servername:/var/www/remote_dir/(远程目录) /var/www/local_dir(本地目录)
上传目录到服务器scp -r local_dir username@servername:remote_dir
Python基础语法
python基础知识
问题
# encoding:utf-8 乱码
注释
单行注释#
多行注释‘’‘
print函数
变量及类型
type() 函数进行查看某个数据属于哪个数据类型;
str()或repr()函数将数值转换成字符串
转义字符\\可以把一个字符串写成两行>>> print('aaa\\eee')
原始字符串
标识符和关键字
变量命名规则:识符必须以字母(大小写均可)或者"_"开头,接下来可以重复0到多次(字母|数字|"_"),用于作为变量,函数名,类名,方法名等,不能包含空格
python关键字
格式化输出
转义字符
\:换行
延时
>>> import time>>> time.sleep(3)
输入
使用input获取用户输入:>>> a=input('提示:')提示:100+99>>> a'100+99'
运算符
算术运算 +-*/ %求余 **幂 //取整除,返回商的整数部分
比较运算:== != <> 不等于(是否不相等) > < >= <=
赋值运算 := += -= *= /= %= **= //=
逻辑运算 :and or not
>>> "hello"*3'hellohellohello'
三目运算符
True_statements if expression else False_statements例: print("a>b") if a>b else print("a<=b")嵌套: print("a>b") if a>b else print("a<b") if a<b else print("a=b")
成员运算in or not in
数据类型转换
cmd执行python程序例子:python E:\\文件名.py
判断语句和循环语句
if条件语句
if嵌套
if 表达式1: 语句 if 表达式2: 语句 elif 表达式3: 语句 else 语句elif 表达式4: 语句else: 语句
if..else
age=input("输入您的年龄:")if int(age)>=18:\tprint("您已经成年,可以。。")else:\tprint("您是未成年,不可以。。")
在使用if..else分支时,一定要先处理包含范围更小的情形。
random库函数
random()函数,生成0到1的随机小数
False、None、""、()、[]、{}做为bool表达式时,被当做False处理
assert断言
age=int(input("请输入您的年龄:"))assert 20<age<80print(‘您的年龄正确’)#如果正确往下执行,否则发生Error
pass空语句
while循环
i=0while i<=10:\tprint("我错了,对不起!")\ti+=1
i=1sum=0while i<=100:\tsum+=i\ti+=1print("....%d..."%sum)
for循环
for 变量 in
import timename="dongGe"for temp in name: print("%s"%temp) time.sleep(1)
vim for.py +8 调到第8行
a=range(10)a_list=[x*x for x in a] #for表达式可以的使用
break和continue
break强制结束name="baoqiang"for x in name: print("-----") if(x=='i'): break print(x)
name="baoqiang"for x in name: print("-----") if(x=='i'): continue print(x)
continue 语句跳出本次循环,而break跳出整个循环。
字符串、列表、元组、字典
字符串string
字符串不能修改,对字符串进行大小写其实质是将原来的字符串覆盖%s
>>> name='leejuny'>>> name[1]
切片语法:str[起始:结束:步长],左封右开>>> name='baoqiang'>>> print(name[0:6:2])name[-3:-1] #name[::-1] #逆序
常用字符串大小相关函数:title():首字符改成大写lower()upper()
删除空白strip():删除字符串前后的空白lstrip()rstrip()
查找、替换等find():查找指定子串在字符串出现的位置,没有则返回-1index():查找指定子串在字符串出现的位置,没有则报错replace():替换startswith()、endswith():判断字符串是否以指定子串开头\\结尾
列表list
列表可以增删改查,通过下标来查找[]
增
append() #在list的末尾添加一个元素
stu_name.append('杨月')#在list的末尾添加一个元素
insert() #指定位置添加元素
extend() #末位添加列表
L1+L2 #合并
L1*3 #乘
删
remove() #删除指定元素
stu.remove('222')
pop() #删除最后一个元素
pop(index) #删除指定下标的元素
del list / del list[index]
clear()#清空列表
改
list[index] = 'XXXX'#修改指定下标位置的值
List.reverse() #反转
stu.sort(reverse = True) #排序 降序
stu.sort() #排序 默认升序
查
stu[0] #第一个元素
stu[-1] #倒数第一个元素
stu.count('jack') #查询某个元素在list里面出现的次数
stu.index('jack') #查询指定元素的下标
list()函数可用于将元组、range等对象转换成列表。tuple()函数可用于将列表、range等对象转换成元组。
列表遍历例子
元组tuple
元组是只读列表():元组里的数据不可修改
字典dict
字典是无序的,通过key来查找,不通过下标{}键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。
常见操作
修改
dict['Age'] = 8;
添加
newNames['name3']='CCC' #可以是新增或修改
删除
del clear:del newNames ... newNames.clear()pop() ...newNames.pop('A')
get()根据key获取valueupdate()根据key更新value
遍历
in info.items():... print(i)
常用工具函数
reversed()可接收各种序列(元组、列表、区间等)参数,返回一个逆序列的迭代器.x for x in reversed(range(10))
函数
函数定义、调用
def fun():#定义一个函数,后面是函数名 print("Hello World")#函数体fun() #函数调用
函数参数
位置参数
默认参数[缺省参数]
可变参数
>>> def test2(*n):\tsum=0\tfor x in n:\t\tsum+=x\treturn sum
关键字参数
函数返回值return
函数嵌套调用
https://blog.csdn.net/title71/article/details/80464427
局部、全局变量
全局变量如果要在函数中修改的话,需要加global关键字声明,如果是list、字典的话,则不需要加global关键字,直接就可以修改。
递归函数
def test1(num): if num>1: result=num+test1(num-1) else: result=1 return resultresult=test1(10)print(result)
匿名函数
引用
数据的在内存中的地址就是数据的引用。如果两个变量为同一个引用,那么这两个变量对应的数据一定相同;如果两个变量对应的数据相同,引用不一定相同。通过id(数据)可以查看数据对应的地址,修改变量的值,其实是在修改变量的引用。
数字独自占空间
可变类型:
不可变类型:
a+=a是在原数据上进行修改,a=a+a是先定义了一个变量,再取值
面向对象
类和对象
类是对某一类事物的抽象描述,是一种抽象的数据类型,一种模板。而对象用于表示现实中该类事物的个体,也就是具体化了类的描述。它们的关系是,对象是类的具体实例,类是对象的模板。对象根据类创建,一个类可以创建多个对象。
类的构成
使用class关键字定义一个类,类的主体由属性(变量)和方法(函数)组成。
定义类
创建对象
#定义一个类class Dog: def __init__(self): #默认方法 self.weight=5 self.color='黄色' #定义一个方法 def sleep(self): print("www...") def __str__(self): return 'XXXX'#创建一只小狗xiaogou=Dog()#调用小狗这个对象的一个方法print(xiaogou)
__init__(self)方法
在创建对象是自动执行
理解self
__str__(self)方法
一般用来测试
隐藏数据
1、直接通过对象名修改 SweetPotato.cookedLevel = 5
2、通过方法间接修改 SweetPotato.cook(5) 推荐使用
应用:烤地瓜
应用:存放家具
私有属性
__del__
当对象在内存中被释放时,自动触发执行
继承
通过继承来的方法访问父类的私有属性是可以的在子类中自定义的方法是不能访问父类的私有属性
重写父类方法与调用父类方法
class Animal(object): def bark(self): print("aaa")class Cat(Animal): def bark(self): #重写 #调用父类的这个方法bark【两种方法】 Animal.bark(self) super().bark() print("喵喵。。")tom=Cat()tom.bark()
多继承
python默认广度遍历
多态
class Animal(object): def bark(self): print("啊啊啊...")class Cat(Animal): def bark(self): print("喵喵喵...")class Dog(Animal): def bark(self): print("汪汪汪...")class Robot(object): def bark(self): print("嗡嗡嗡...")#多态,调用的方法是同一个,但是执行的代码不一样def animalBark(temp): temp.bark()miaomi=Cat()wangcai=Dog()animalBark(miaomi)animalBark(wangcai)dingdang=Robot()animalBark(dingdang)#结果:喵喵喵... 汪汪汪... 嗡嗡嗡...
类属性和实例属性
异常
try..except...
#万能异常Exceptions1 = 'hello'try: int(s1)except Exception as e: print(e)
try: print(num)except NameError as e: print(e)else: print("没有捕获到异常")finally: print("我一定会执行的哦")
try..finally...无论是否发生异常都将会执行最后的代码
抛出异常raise
文件
基本语法
读文件
read() \t一次读取文件所有内容,返回一个strread(size)\t每次最多读取指定长度的内容,返回一个str;size指定的是字符长度,一个汉字占3个字节readlines()\t一次读取文件所有内容,按行返回一个listreadline()\t每次只读取一行内容
修改文件
方法1:1、先把文件内容全部读取2:在内存中修改3:把修改好的内容覆盖写入到硬盘上
方法2:1:以读的方式打开源文件2:以写的方式打开一个新文件
相对路径
../ 表示当前文件所在的目录的上一级目录 ./ 表示当前文件所在的目录(可以省略) / 表示当前站点的根目录(域名映射的硬盘目录)
正则表达式re
简介
主要是对字符串的一种过滤,用“元字符” 与“普通字符”组成一个字符串规则对已知的字符串或文本过滤出自己想要的字符串。
元字符
?! “不包含”
库
1、re.match
2、re.search
3、re.sub
4、re.compile
邮箱正则[A-Za-z0-9\\._+]+@[A-Za-z]+\\.(com|org|edu|net)
HTML、CSS基础语法
html基本结构
#html基本结构:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> </body></html>
head
<base> 标签
档中所有的链接标签的默认链接
<base href="http://www.runoob.com/images/" target="_blank">
<link>
通常用于链接到样式表
<link rel="stylesheet" type="text/css" href="mystyle.css">
<style> 标签
定义了HTML文档的样式文件引用地址
<head><style type="text/css">body {background-color:yellow}p {color:blue}</style></head>
<meta> 标签
提供了元数据.元数据也不显示在页面上,但会被浏览器解析。
<script>标签用于加载脚本文件,如: JavaScript。
body
基础
html标题
通过<h1> - <h6> 标签来定义的.
段落 <p>
<p>这是一个段落。</p>
链接<a>
<a href="http://www.baidu.com" target="_self">百度一下</a>
target="_self"本页面 | target="_blank" 新页面
title 给链接添加提示文字name 链接命名 id 链接id名
在当前页面链接到指定位置<a href="#名字">和要链接到的位置<a id="名字">它的作用是使用书签是可以跳转到需要的地方。
图像img
<img src="/images/logo.png" width="258" height="39" />
src 属性 定义图片的引用地址alt 属性 定义图片加载失败时显示的文字<img src=”images/pic.jpg” alt=”产品图片” />
路径:相对和绝对路径
注释<! -- -->
按住ctrl+/键
换行<br>
水平线<hr>
空格
属性
属性\t 描述class\t 为html元素定义一个或多个类名(classname)(类名从样式文件引入)id\t 定义元素的唯一idstyle\t 规定元素的行内样式(inline style)title\t 描述了元素的额外信息 (作为工具条使用)
文本格式化
<b>加粗文本</b><i>斜体文本</i><code>电脑自动输出</code>这是 <sub> 下标</sub> 和 <sup> 上标</sup>
列表
<ol>\t定义有序列表<ul>\t定义无序列表<li>\t定义列表项<dl>\t自定义列表<dt>\t自定义列表项目<dd>\t定义自定列表项的描述
表格
每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由 <td> 标签定义)
边框属性
表格的表头使用 <th> 标签进行定义。
表单
网络爬虫
requests库获取网页源代码
Requests 库 就是这样一个擅长处理那些复杂的 HTTP 请求、 cookie、 header(响应头和请求头)等内容的 Python 第三方库。
requests里.text和.content方法的区别
text返回的是Unicode型的数据。content返回的是bytes型也就是二进制的数据文本类型用text,图片、文件类型用contexnt
提交一个基本表单可用get或者post
提交文件和图像
处理登录和cookie
会话(session)对象(调用 requests.Session() 获取)会持续跟踪会话信息,像 cookie、 header, 甚至包括运行 HTTP 协议的信息
HTTP基本接入认证
BeautifulSoupHTML 解析库【静】
参考网站:https://blog.csdn.net/youzhouliu/article/details/58586230
python爬取网页中文乱码解决方案
r.encoding为服务器内容使用的文本编码r.encoding = r.apparent_encoding # 解决中文乱码
类名查找或id查找: soup.select('.c-gap-left-small') soup.select('#content_bottom') 组合查找: soup.select('a .c-gap-left-small') 基于select获取:css选择器,写 CSS 时,标签名不加任何修饰,类名前加.,id名前加#;返回值是一个列表 标签名查找:soup.select('h3 a')取h3标签下的a标签;等价于soup.select('h3 > a')
直接调用bsObj.div.h1
导航树
BeautifulSoup 库里, 孩子(child)和后代(descendant)有显著的不同:和人类的家谱一样,子标签就是一个父标签的下一级,而后代标签是指一个父标签下面所有级别的标签。 例如, tr 标签是 tabel 标签的子标签,而 tr、 th、 td、 img 和 span标签都是 tabel 标签的后代标签
正则表达式和BeautifulSoup
获取属性
一个标签对象,可以用下面的代码获取它的全部属性:myTag.attrsmyImgTag.attrs["src"] 获取单个属性比如标签 <a> 指向的 URL 链接包含在 href 属性中,或者 <img> 标签的图片文件包含在 src 属性中,这时获取标签属性就变得非常有用了
采集
遍历单个域名
遍历所有域名
json库的使用
js范例
json库一共有三个方法,分别是 dump、dumps、load、loads。
其中 dump和 dumps是用来把把字典和数组转换为 json格式的,dump把转换结果直接写入文件,dumps返回字符串。
load和 loads是把 json格式的数据转换为字典格式,load直接从 json文件中读取数据并返回字典对象,loads把字符串形式的 json数据转换成字典格式。
存储数据
媒体文件
csv
python读写、追加csv方法:‘r’:只读(缺省。如果文件不存在,则抛出错误)‘w’:只写(如果文件不存在,则自动创建文件)‘a’:附加到文件末尾(如果文件不存在,则自动创建文件)‘r+’:读写(如果文件不存在,则抛出错误)
mysql
selenium
selenium爬虫中主要用来解决JavaScript渲染问题。AJAX 在后台与服务器进行少量数据交换可以使网页实现异步更新。
【网页用到框架处理方法】如果iframe有name或id的话,直接使用switch_to_frame("name值")或switch_to_frame("id值")
【1、获得驱动】
from selenium import webdriverdriver = webdriver.Chrome() #C大写driver.get("https://www.dianping.com/search/category/7/10/p1")
【2、元素定位】
id定位:find_element_by_id()name定位:find_element_by_name()class定位:find_element_by_class_name()link定位:find_element_by_link_text()partial link定位:find_element_by_partial_link_text()tag定位:find_element_by_tag_name()xpath定位:find_element_by_xpath()css定位:find_element_by_css_selector()
#coding=utf-8from selenium import webdriverbrowser=webdriver.Firefox()browser.get("http://www.baidu.com")#########百度输入框的定位方式###########通过id方式定位browser.find_element_by_id("kw").send_keys("selenium")#通过name方式定位browser.find_element_by_name("wd").send_keys("selenium")#通过tag name方式定位browser.find_element_by_tag_name("input").send_keys("selenium")#通过class name方式定位browser.find_element_by_class_name("s_ipt").send_keys("selenium")#通过CSS方式定位browser.find_element_by_css_selector("#kw").send_keys("selenium")#通过xpath方式定位browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")############################################browser.find_element_by_id("su").click()time.sleep(3)browser.quit()
【3、元素事件】
【4、对象操作】
参考地址:https://blog.csdn.net/One_of_them/article/details/82560880 https://www.cnblogs.com/new-june/p/9599331.htmlhttps://www.jianshu.com/p/1531e12f8852
启动浏览器
selinium两种启动方式
普通方式启动
from selenium import webdriverbrowser = webdriver.Chrome()browser.get('http://www.baidu.com/')
Headless方式启动
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.common.keys import Keyschrome_options = webdriver.ChromeOptions()# 使用headless无界面浏览器模式chrome_options.add_argument('--headless') #增加无界面选项chrome_options.add_argument('--disable-gpu') #如果不加这个选项,有时定位会出现问题# 启动浏览器,获取网页源代码browser = webdriver.Chrome(chrome_options=chrome_options)mainUrl = "https://www.taobao.com/"browser.get(mainUrl)print(f"browser text = {browser.page_source}")browser.quit()
加载配置启动浏览器
Selenium操作浏览器是不加载任何配置的用Chrome地址栏输入chrome://version/,查看自己的“个人资料路径”,然后在浏览器启动时,调用这个配置文件
#coding=utf-8from selenium import webdriveroption = webdriver.ChromeOptions()option.add_argument(r'--user-data-dir=C:\\Users\\leeju\\AppData\\Local\\Google\\Chrome\\User Data\\Default') #设置成用户自己的数据目录driver=webdriver.Chrome(chrome_options=option)
Django
MVC
MVC框架的核心思想是:解耦
MVT
Djiango属于MVT框架
参考地址http://www.liujiangblog.com/course/django/85
环境搭建
各文件和目录解释:外层的mysite/目录与Django无关,只是你项目的容器,可以任意重命名。manage.py:一个命令行工具,用于与Django进行不同方式的交互脚本,非常重要!内层的mysite/目录是真正的项目文件包裹目录,它的名字是你引用内部文件的包名,例如:mysite.urls。mysite/__init__.py:一个定义包的空文件。mysite/settings.py:项目的主配置文件,非常重要!mysite/urls.py:路由文件,所有的任务都是从这里开始分配,相当于Django驱动站点的内容表格,非常重要!mysite/wsgi.py:一个基于WSGI的web服务器进入点,提供底层的网络通信功能,通常不用关心。
定义模型
使用后台管理
编写视图
定义模板
0 条评论
回复 删除
下一页