专栏目录:html
Python爬虫与数据分析之python教学视频、python源码分享,pythonpython
Python爬虫与数据分析之基础教程:Python的语法、字典、元组、列表程序员
Python爬虫与数据分析之进阶教程:文件操做、lambda表达式、递归、yield生成器正则表达式
Python爬虫与数据分析之模块:内置模块、开源模块、自定义模块算法
Python爬虫与数据分析之爬虫技能:urlib库、xpath选择器、正则表达式sql
Python爬虫与数据分析之京东爬虫实战:爬取京东商品并存入sqlite3数据库shell
Python爬虫与数据分析之二手车平台数据获取和分析数据库
Python爬虫与数据分析之python开源爬虫项目汇总macos
模块,用一砣代码实现了某个功能的代码集合。 编程
相似于函数式编程和面向过程编程,函数式编程则完成一个功能,其余代码用来调用便可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能须要多个函数才能完成(函数又能够在不一样的.py文件中),n个 .py 文件组成的代码集合就称为模块。
如:os 是系统相关的模块;file是文件操做相关的模块
模块分为三种:
1、定义模块
情景一:
情景二:
情景三:
2、导入模块
Python之因此应用愈来愈普遍,在必定程度上也依赖于其为程序员提供了大量的模块以供使用,若是想要使用模块,则须要导入。导入模块有一下几种方法:
1 2 3 4 |
|
导入模块其实就是告诉Python解释器去解释那个py文件
那么问题来了,导入模块时是根据那个路径做为基准来进行的呢?即:sys.path
1 2 3 4 5 |
|
若是sys.path路径列表没有你想要的路径,能够经过 sys.path.append('路径') 添加。
经过os模块能够获取各类目录,例如:
1 import sys 2 import os 3 4 pre_path = os.path.abspath('../') 5 sys.path.append(pre_path)
1、下载安装
下载安装有两种方式:
yum
pip
apt-get
...
下载源码
解压源码
进入目录
编译源码 python setup.py build
安装源码 python setup.py install
注:在使用源码安装时,须要使用到gcc编译和python开发环境,因此,须要先执行:
1 2 3 4 |
|
安装成功后,模块会自动安装到 sys.path 中的某个目录中,如:
1 |
|
2、导入模块
同自定义模块中导入的方式
3、模块 paramiko
paramiko是一个用于作远程控制的模块,使用该模块能够对远程服务器进行命令或文件操做,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。
一、下载安装
1 |
|
或
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
2、使用模块
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 import paramiko 5 6 ssh = paramiko.SSHClient() 7 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 8 ssh.connect('192.168.1.108', 22, 'alex', '123') 9 stdin, stdout, stderr = ssh.exec_command('df') 10 print stdout.read() 11 ssh.close(); 12 13 14 15 import paramiko 16 17 private_key_path = '/home/auto/.ssh/id_rsa' 18 key = paramiko.RSAKey.from_private_key_file(private_key_path) 19 20 ssh = paramiko.SSHClient() 21 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 22 ssh.connect('主机名 ', 端口, '用户名', key) 23 24 stdin, stdout, stderr = ssh.exec_command('df') 25 print stdout.read() 26 ssh.close() 27 28 29 30 import os,sys 31 import paramiko 32 33 t = paramiko.Transport(('182.92.219.86',22)) 34 t.connect(username='wupeiqi',password='123') 35 sftp = paramiko.SFTPClient.from_transport(t) 36 sftp.put('/tmp/test.py','/tmp/test.py') 37 t.close() 38 39 40 import os,sys 41 import paramiko 42 43 t = paramiko.Transport(('182.92.219.86',22)) 44 t.connect(username='wupeiqi',password='123') 45 sftp = paramiko.SFTPClient.from_transport(t) 46 sftp.get('/tmp/test.py','/tmp/test2.py') 47 t.close() 48 49 50 51 52 53 54 import paramiko 55 56 pravie_key_path = '/home/auto/.ssh/id_rsa' 57 key = paramiko.RSAKey.from_private_key_file(pravie_key_path) 58 59 t = paramiko.Transport(('182.92.219.86',22)) 60 t.connect(username='wupeiqi',pkey=key) 61 62 sftp = paramiko.SFTPClient.from_transport(t) 63 sftp.put('/tmp/test3.py','/tmp/test3.py') 64 65 t.close() 66 67 import paramiko 68 69 pravie_key_path = '/home/auto/.ssh/id_rsa' 70 key = paramiko.RSAKey.from_private_key_file(pravie_key_path) 71 72 t = paramiko.Transport(('182.92.219.86',22)) 73 t.connect(username='wupeiqi',pkey=key) 74 75 sftp = paramiko.SFTPClient.from_transport(t) 76 sftp.get('/tmp/test3.py','/tmp/test4.py') 77 78 t.close() 79
1、os
用于提供系统级别的操做
1 os.getcwd() 获取当前工做目录,即当前python脚本工做的目录路径 2 os.chdir("dirname") 改变当前脚本工做目录;至关于shell下cd 3 os.curdir 返回当前目录: ('.') 4 os.pardir 获取当前目录的父目录字符串名:('..') 5 os.makedirs('dirname1/dirname2') 可生成多层递归目录 6 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 7 os.mkdir('dirname') 生成单级目录;至关于shell中mkdir dirname 8 os.rmdir('dirname') 删除单级空目录,若目录不为空则没法删除,报错;至关于shell中rmdir dirname 9 os.listdir('dirname') 列出指定目录下的全部文件和子目录,包括隐藏文件,并以列表方式打印 10 os.remove() 删除一个文件 11 os.rename("oldname","newname") 重命名文件/目录 12 os.stat('path/filename') 获取文件/目录信息 13 os.sep 输出操做系统特定的路径分隔符,win下为"\\",Linux下为"/" 14 os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" 15 os.pathsep 输出用于分割文件路径的字符串 16 os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' 17 os.system("bash command") 运行shell命令,直接显示 18 os.environ 获取系统环境变量 19 os.path.abspath(path) 返回path规范化的绝对路径 20 os.path.split(path) 将path分割成目录和文件名二元组返回 21 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 22 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 23 os.path.exists(path) 若是path存在,返回True;若是path不存在,返回False 24 os.path.isabs(path) 若是path是绝对路径,返回True 25 os.path.isfile(path) 若是path是一个存在的文件,返回True。不然返回False 26 os.path.isdir(path) 若是path是一个存在的目录,则返回True。不然返回False 27 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径以前的参数将被忽略 28 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 29 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 30
2、sys
用于提供对解释器相关的操做
1 sys.argv 命令行参数List,第一个元素是程序自己路径 2 sys.exit(n) 退出程序,正常退出时exit(0) 3 sys.version 获取Python解释程序的版本信息 4 sys.maxint 最大的Int值 5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 6 sys.platform 返回操做系统平台名称 7 sys.stdout.write('please:') 8 val = sys.stdin.readline()[:-1] 9
更多猛击这里
3、hashlib
用于加密相关的操做,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
1 import md5 2 hash = md5.new() 3 hash.update('admin') 4 print hash.hexdigest() 5 6 7 import sha 8 9 hash = sha.new() 10 hash.update('admin') 11 print hash.hexdigest()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
以上加密算法虽然依然很是厉害,但时候存在缺陷,即:经过撞库能够反解。因此,有必要对加密算法中添加自定义key再来作加密。
1 2 3 4 5 6 7 |
|
还不够吊?python 还有一个 hmac 模块,它内部对咱们建立 key 和 内容 再进行处理而后再加密
1 2 3 4 |
|
不能再牛逼了!!!
4、json 和 pickle
用于序列化的两个模块
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
5、执行系统命令
能够执行shell命令的相关模块和函数有:
import commands
result = commands.getoutput('cmd')
result = commands.getstatus('cmd')
result = commands.getstatusoutput('cmd')
以上执行shell命令的相关的模块和函数的功能均在 subprocess 模块中实现,并提供了更丰富的功能。
call
执行命令,返回状态码
1 2 |
|
shell = True ,容许 shell 命令是字符串形式
check_call
执行命令,若是执行状态码是 0 ,则返回0,不然抛异常
1 2 |
|
check_output
执行命令,若是状态码是 0 ,则返回执行结果,不然抛异常
1 2 |
|
subprocess.Popen(...)
用于执行复杂的系统命令
参数:
终端输入的命令分为两种:
1 import subprocess 2 3 obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',) 4 5 6 import subprocess 7 8 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 9 obj.stdin.write('print 1 \n ') 10 obj.stdin.write('print 2 \n ') 11 obj.stdin.write('print 3 \n ') 12 obj.stdin.write('print 4 \n ') 13 obj.stdin.close() 14 15 cmd_out = obj.stdout.read() 16 obj.stdout.close() 17 cmd_error = obj.stderr.read() 18 obj.stderr.close() 19 20 print cmd_out 21 print cmd_error 22 23 24 import subprocess 25 26 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 27 obj.stdin.write('print 1 \n ') 28 obj.stdin.write('print 2 \n ') 29 obj.stdin.write('print 3 \n ') 30 obj.stdin.write('print 4 \n ') 31 32 out_error_list = obj.communicate() 33 print out_error_list 34 35 36 import subprocess 37 38 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 39 out_error_list = obj.communicate('print "hello"') 40 print out_error_list 41 更多猛击这里
6、shutil
高级的 文件、文件夹、压缩包 处理模块
1 shutil.copyfileobj(fsrc, fdst[, length]) 2 将文件内容拷贝到另外一个文件中,能够部份内容 3 4 shutil.copyfile(src, dst) 5 拷贝文件 6 7 shutil.copymode(src, dst) 8 仅拷贝权限。内容、组、用户均不变 9 10 shutil.copystat(src, dst) 11 拷贝状态的信息,包括:mode bits, atime, mtime, flags 12 13 shutil.copy(src, dst) 14 拷贝文件和权限 15 16 shutil.copy2(src, dst) 17 拷贝文件和状态信息 18 19 shutil.ignore_patterns(*patterns) 20 shutil.copytree(src, dst, symlinks=False, ignore=None) 21 递归的去拷贝文件 22 23 例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*')) 24 25 shutil.rmtree(path[, ignore_errors[, onerror]]) 26 递归的去删除文件 27 28 29 30 shutil.move(src, dst) 31 递归的去移动文件 32 33 shutil.make_archive(base_name, format,...)
建立压缩包并返回文件路径,例如:zip、tar
1 2 3 4 5 6 7 8 9 |
|
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
1 import zipfile 2 3 # 压缩 4 z = zipfile.ZipFile('laxi.zip', 'w') 5 z.write('a.log') 6 z.write('data.data') 7 z.close() 8 9 # 解压 10 z = zipfile.ZipFile('laxi.zip', 'r') 11 z.extractall() 12 z.close() 13 14 15 import tarfile 16 17 # 压缩 18 tar = tarfile.open('your.tar','w') 19 tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip') 20 tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip') 21 tar.close() 22 23 # 解压 24 tar = tarfile.open('your.tar','r') 25 tar.extractall() # 可设置解压地址 26 tar.close() 27
七、logging
用于便捷记录日志且线程安全的模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
对于等级:
1 2 3 4 5 6 7 8 |
|
只有大于当前日志等级的操做才会被记录。
对于格式,有以下属性但是配置:
八、time
时间相关的操做,时间有三种表示方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
九、re
re模块用于对python的正则表达式的操做。
字符:
. 匹配除换行符之外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
次数:
* 重复零次或更屡次
+ 重复一次或更屡次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更屡次
{n,m} 重复n到m次
IP:
^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$
手机号:
^1[3|4|5|8][0-9]\d{8}$
一、match(pattern, string, flags=0)
从起始位置开始根据模型去字符串中匹配指定内容,匹配单个
1 import re 2 3 obj = re.match('\d+', '123uuasf') 4 if obj: 5 print obj.group() 6 7 8 9 # flags 10 I = IGNORECASE = sre_compile.SRE_FLAG_IGNORECASE # ignore case 11 L = LOCALE = sre_compile.SRE_FLAG_LOCALE # assume current 8-bit locale 12 U = UNICODE = sre_compile.SRE_FLAG_UNICODE # assume unicode locale 13 M = MULTILINE = sre_compile.SRE_FLAG_MULTILINE # make anchors look for newline 14 S = DOTALL = sre_compile.SRE_FLAG_DOTALL # make dot match newline 15 X = VERBOSE = sre_compile.SRE_FLAG_VERBOSE # ignore whitespace and comments 16
二、search(pattern, string, flags=0)
根据模型去字符串中匹配指定内容,匹配单个
import re
obj = re.search('\d+', 'u123uu888asf')
if obj:
print obj.group()
三、group和groups
a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group()
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(0)
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(1)
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(2)
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).groups()
四、findall(pattern, string, flags=0)
上述两中方式均用于匹配单值,即:只能匹配字符串中的一个,若是想要匹配到字符串中全部符合条件的元素,则须要使用 findall。
import re
obj = re.findall('\d+', 'fa123uu888asf')
print obj
五、sub(pattern, repl, string, count=0, flags=0)
用于替换匹配的字符串
content = "123abc456"
new_content = re.sub('\d+', 'sb', content)
# new_content = re.sub('\d+', 'sb', content, 1)
print new_content
相比于str.replace功能更增强大
六、split(pattern, string, maxsplit=0, flags=0)
根据指定匹配进行分组
content = "'1 - 2 * ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )'"
new_content = re.split('\*', content)
# new_content = re.split('\*', content, 1)
print new_content
content = "'1 - 2 * ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )'"
new_content = re.split('[\+\-\*\/]+', content)
# new_content = re.split('\*', content, 1)
print new_content
inpp = '1-2*((60-30 +(-40-5)*(9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2))'
inpp = re.sub('\s*','',inpp)
new_content = re.split('\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+){1}\)', inpp, 1)
print new_content
相比于str.split更增强大
实例:计算器源码
10、random
随机数
1 2 3 4 |
|
随机验证码实例:
1 2 3 4 5 6 7 8 9 10 |
|
>零起点大数据与量化分析PDF及教程源码
>利用python进行数据分析PDF及配套源码
>大数据项目实战之Python金融应用编程(数据分析、订价与量化投资)讲义及源码
>董付国老师Python教学视频
1. 课堂教学管理系统开发:在线考试功能设计与实现
2. Python+pillow图像编程;
3. Python+Socket编程
4. Python+tkinter开发;
5. Python数据分析与科学计算可视化
6. Python文件操做
7. Python多线程与多进程编程
8. Python字符串与正则表达式
.....
>数据分析教学视频
1. 轻松驾驭统计学——数据分析必备技能(12集);
2. 轻松上手Tableau 软件——让数据可视化(9集);
3. 竞品分析实战攻略(6集);
4. 电商数据化运营——三大数据化工具应用(20集);
>大数据(视频与教案)
1. hadoop
2. Scala
3. spark
>Python网络爬虫分享系列教程PDF
>【千锋】Python爬虫从入门到精通(精华版)(92集)