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()
原创粉丝点击