Python模块学习笔记
来源:互联网 发布:网络运营托管 编辑:程序博客网 时间:2024/05/15 23:48
os、shutil
管理系统文件
import osimport shutilos.getcwd() # 获取当前路径os.listdir()# 列出当前目录下所有文件,返回值为列表os.chdir(path)# 切换目录,可使用相对路径shutil.move(path1, path2)# 移动文件, path1为原来文件的路径,path2为移动后的文件路径,均可使用相对路径os.remove(filepath)# 删除文件,若不指定路径,则默认删除当前文件夹os.path.exists("goal") # 判断goal是否存在os.path.isdir("goal") # 判断goal是否目录os.path.isfile("goal") # 判断goal是否文件 # 在python中运行系统命令, command为需要执行的命令,如ls、top等os.system(command)# 获取输出结果存放在str中,返回值为字符串str = os.popen("ls").read()# 但更建议采取下面这种方式import subprocesssubprocess.call(command, shell=True)
sys、getopt
执行Python文件时加参数控制,形如python xxx.py -h
import sys, getoptargv = sys.argv[1:]# 尝试获取参数,若获取不到,则报错退出try: opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])except getopt.GetoptError: print 'test.py -i <inputfile> -o <outputfile>' sys.exit(2)# 获取内容for opt, arg in opts: # 含-h参数 if opt == '-h': print("something") sys.exit() # 含-i,或--ifile参数 elif opt in ("-i", "--ifile"): # 获取-i后的参数内容 str1 = arg # 含-i,或--ofile参数 elif opt in ("-o", "--ofile"): # 获取-o后的参数内容 str2 = arg# 所以此脚本需要输入-i和-o参数,-h参数之后获取帮助信息
argparse
执行Python文件时加参数控制,形如python xxx.py -h
这个模块似乎比sys参数控制更简单。。。
import argparseparser = argparse.ArgumentParser()parser.add_argument('-a', action="st")
requests
网络爬虫(第三方)
import requests# 连接会话s = requests.Session()# 发送get请求, post、put等同理response = s.get(url)# 这二者的区别可能在于content未解析,text解析response.contentresponse.text# 发送数据之后,服务器端返回的值response.json()
re
正则表达式
正则表达式的基本介绍
在正则表达式中,如果直接给出字符,就是精确匹配。用\d可以匹配一个数字,\w可以匹配一个字母或数字,所以:
‘00\d’可以匹配’007’,但无法匹配’00A’;
‘\d\d\d’可以匹配’010’;
‘\w\w\d’可以匹配’py3’;
.可以匹配任意字符,所以:
‘py.’可以匹配’pyc’、’pyo’、’py!’等等。
要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符:
来看一个复杂的例子:\d{3}\s+\d{3,8}。
我们来从左到右解读一下:
\d{3}表示匹配3个数字,例如’010’;
\s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配’ ‘,’ ‘等;
\d{3,8}表示3-8个数字,例如’1234567’。
综合起来,上面的正则表达式可以匹配以任意个空格隔开的带区号的电话号码。
如果要匹配’010-12345’这样的号码呢?由于’-‘是特殊字符,在正则表达式中,要用’\’转义,所以,上面的正则是\d{3}-\d{3,8}。
但是,仍然无法匹配’010 - 12345’,因为带有空格。所以我们需要更复杂的匹配方式。
进阶
要做更精确地匹配,可以用[]表示范围,比如:
[0-9a-zA-Z_]可以匹配一个数字、字母或者下划线;
[0-9a-zA-Z_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如’a100’,’0_Z’,’Py3000’等等;
[a-zA-Z_][0-9a-zA-Z_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;
[a-zA-Z_][0-9a-zA-Z_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
A|B可以匹配A或B,所以(P|p)ython可以匹配’Python’或者’python’。
^表示行的开头,^\d表示必须以数字开头。
表示行的结束,\d 表示必须以数字结束。
你可能注意到了,py也可以匹配’python’,但是加上^py$就变成了整行匹配,就只能匹配’py’了
import re# match,将str1与str2比较是否匹配,str1为正则式,str2为需要比较的内容re.match(str1, str2)# search,大体上同match,但match从字符串起始位置匹配,search从任意位置匹配,即search为贪心匹配# 若str1是以^开头,则二者相同re.search(str1, str2)# 判断字符中是否有中文re.search(u'[\u4e00-\u9fa5]+', zhstr)# 关于文本内容替换, str1为正则表达式,str2表示需要替换的内容,str3表示需要替换的文本re.sub(str1, str2, str3)
time
比较两个日期之间的大小,并计算相隔天数
import time# 获取当前时间,以s为单位time.time()# 格式化时间本地时间time.localtime()# 转换日期以s为单位time.mktime()# 格式化输出时间戳time.strftime()# str_input为输入时间str1 = time.mktime(time.strptime(str_input, '%Y-%m-%d'))str2 = time.strftime('%Y-%m-%d', time.localtime(time.time()))str2 = time.mktime(time.strptime(str2, '%Y-%m-%d'))# 可直接进行比较输入日期与当前日期的大小# 若要计算相差天数,采取公式,此处默认str1>str2days = int(int(str1 - str2) / 3600 / 24)
常用的时间函数
# 推迟程序运行1stime.sleep(1)# 输出运行程序片段的时间start = time.time()somethingend = time.time()print(end - start)# 输出年月日,返回值是字符串time.strftime("%Y-%m-%d", time.localtime())# 输出当前时间时分秒time.strftime("%H:%M:%S", time.localtime())# 输出年月日时分秒time.strftime("%Y-%m-%d %X", time.localtime())
PyMySQL
用Python程序操作mysql数据库
# 首先需要安装第三方库PyMySQL>>>pip3 install PyMysql# 引入模块import pymysql# 第一步连接数据库,按照下面格式填写host、user、password、database,host如果是本地可以直接写'localhost',如果数据库格式不是utf8可省去或者自行更换db = pymysql.connect(host=host, user=user, password=password, database=database, charset='utf8' )# 使用cursor()方法,创建一个游标对象cursorcursor = db.cursor()# 使用execute()方法执行SQL命令,cursor.execute(sql_command)# 如果执行的是查询命令# 获取单条数据data = cursor.fetchone()# 获取所有数据data = cursor.fetchall()# 如果是更改数据库命令,如插入语句,新建语句等,需要在操作之后提交db.commit()# 发生错误时回滚命令db.rollback()# 最后一定要关闭数据库连接db.close()
pymongo
使用Python操作mongodb数据库
# 首先需要安装第三方库pymongo>>>pip3 install pymongo# 引入模块from pymongo import MongoClient# 连接数据库,按照下面格式填写user、password、host、port、database,host如果是本机就是localhost,database如果是admin就是查看所有数据库client = MongoClient("mongodb://user:password@host:port/database")# 我这里了database填写的是admin# 连接某个数据库,database_name为数据库名db = client[database_name]# 连接数据库中的某个表,表名为table_nameconn = db[table_name]# 获取表中所有数据conn.find()# 查询操作跟普通操作mongodb是类似的
json
# 导入模块import json# 将Python对象编码为json字符串json.dumps()# 解码json数据json.loads()# 保存json数据到本地, test.json为文件名,data是需要存放的json数据with open("test.json", "w") as f: json.dump(data, f)# 打开本地名为test.json文件,并将数据加载到data中with open("test.json", "r") as f: data = json.load(f)# 美化输出,如果使用print输出json,数据展现及其难看懂,使用pprint更便于观察数据from pprint import pprintpprint(data)
Magic Wormhole
实现任意平台任意网络下的文件传输
# 安装>>>pip install magic-wormhole# 可传输文件或者目录# 发送端,xxx为发送目标>>>wormhole send xxx# 自动生成密钥# 接收端>>>wormhole receive# 输入密钥,按y同意接收
注意事项
- 虽然不限制系统,但是要求两端必须安装Python、和对应的margic-wormhole
- 传输速度取决于两端的网速(慢的慢一方)】
- 不支持续传
- 传文件时,它先自压缩再自解压
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
P.S Windows下安装报错,可能原因是需要安装微软依赖,按照提示到对应网址下载依赖即可
PyInstaller
python程序打包
安装
>>>pip install PyInstaller
打包程序
>>>pyinstaller -F main.py
说明
- main.py是需要打包的目标文件
- 执行文件生成在对应目录的dist文件夹下
- 文件是以exe为后缀的(Windows下)
- Linux下的可执行文件需要修改权限才能执行
注意事项
1. 只支持同一平台,即Windows下打包只能在Windows下使用,Linux下打包只能在Linux下使用。不能实现在Windows下,打包成Linux的执行文件。
2. 只能打包系统中能正常执行文件。例,系统中没有安装numpy包,尽管语法正确且用上面命令能正常输出可执行文件,但是不能使用,会报语法错误。
Kivy
使用Python开发app
官网地址
安装(windows)
# 更新pip:>>>python -m pip install --upgrade pip wheel setuptools# 安装kivy的依赖>>>python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew>>>python -m pip install kivy.deps.gstreamer# python3.5以上版本可直接使用下行命令>>>python -m pip install kivy.deps.angle# 安装kivy>>>python -m pip install kivy
先挖个坑,此模块还未进行学习
Tkinter
Gui库,图形化界面,可结合PyInstaller来使用
python3和python2使用起来有一点不同,本文使用的python3
# 此模块为Python自带,不需要安装# 导入模块import tkinter as tk# 引入一个Tk, 标题名为titleroot = tk.Tk(className_ = "title")# 控制窗口大小, 长x宽+与左侧距离+与上侧距离root.geometry("200x200+200+200")# 框架控件frame = tk.Frame(root)# 在对应框架控件内,放置标签控件,名为textlabel = tk.Label(frame, text = "text")# 输入控件,width为宽度entry = tk.Entry(frame, width = "40")# 输入控件中的值entry_value = entry.get()# 按钮控件,名为buttonbtn = tk.Button(frame, text = "button")# 文本控件,显示多行文本Text = tk.Text()# 打包控件到窗口中, side表示放置位置label.pack(side = "top")btn.pack(side = "bottom")frame.pack(side = 'left')# 让窗口运行一直运行,直到关闭窗口位置root.mainloop()
- Python学习笔记----模块
- Python学习笔记----模块
- Python学习笔记--模块
- 【Python学习笔记】模块
- Python学习笔记-模块
- Python模块学习笔记
- Python学习笔记 OS模块
- python doctest模块学习笔记
- python email模块学习笔记
- Python学习笔记--random模块
- python 学习笔记10-----模块
- Python pickle模块学习笔记
- Python学习笔记04 模块
- Python学习笔记4:模块
- Python学习笔记-模块介绍
- python学习笔记(五) - 模块
- Python测试模块学习笔记
- Python学习笔记:random模块
- CodeForces
- 每日英语阅读(六十五)
- 使用pip安装numpy遇到问题
- SmartThreadPool
- c#获取网页源代码的5种方式
- Python模块学习笔记
- 青鸟微信群邀请统计
- css top与bottom属性
- bzoj 1933: [Shoi2007]Bookcase 书柜的尺寸
- Linux源码包安装卸载教程 以apache httpd源码包安装为教程(APR not found)
- Codeforces Round439 C.The Intriguing Obsession
- 【gcd分块】BZOJ4921[互质序列]题解
- 使用ZooKeeper实现Java跨JVM的分布式锁
- JAVA的Md5工具类