python遇到的模块集合

shutil

将一个文件下的文件转移到另一个文件夹

import os
import time
import shutil

src_path = 'C:/Users/lyx/Desktop/test12/'
target_path = 'C:/Users/lyx/Desktop/test13/'

whilr True:
   # 返回指定路径下的文件和文件夹列表。
   file_list = os.listdir(src_path)
   if len(file_list) > 0:
       for file in file_list:
           shutil.move(src_path+file,target_path+file)

 

urllib

原文链接:https://blog.csdn.net/bo_mask/article/details/76067790

在Python2版本中,有urllib和urlib2两个库可以用来实现request的发送。而在Python3中,已经不存在urllib2这个库了,统一为urllib

urllib中包括了四个模块:

urllib.request,urllib.error,urllib.parse,urllib.robotparser

urllib.request可以用来发送request和获取request的结果urllib.error包含了urllib.request产生的异常urllib.parse用来解析和处理URL

urllib.robotparse用来解析页面的robots.txt文件

模拟请求使用的最主要的库是urllib.request,异常处理是urllib.error

urllib.request

urllib.request.urlopen()基本使用

urllib.request 模块提供了最基本的构造 HTTP 请求的方法,利用它可以模拟浏览器的一个请求发起过程,同时它还带有处理 authenticaton (授权验证), redirections (重定向), cookies (浏览器Cookies)以及其它内容。

from urllib import request
import urllib

response = urllib.request.urlopen("https://www.baidu.com")
print(response.read().decode("utf-8"))
print(type(response))
<class 'http.client.HTTPResponse'>

通过输出结果可以发现它是一个 HTTPResposne 类型的对象,它主要包含的方法有 read() 、 readinto() 、getheader(name) 、 getheaders() 、 fileno() 等函数和 msg 、 version 、 status 、 reason 、 debuglevel 、 closed 等属性。 得到这个对象之后,赋值为 response ,然后就可以用 response 调用这些方法和属性,得到返回结果的一系列信息。例如 response.read() 就可以得到返回的网页内容, response.status 就可以得到返回结果的状态码,如200代表请求成功,404代表网页未找到等。

from urllib import parse
from urllib import request
import urllib

data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf8')
response = urllib.request.urlopen('http://httpbin.org/post',data=data)
print(response.read().decode("utf-8"))

在这里我们传递了一个参数 word ,值是 hello 。它需要被转码成 bytes (字节流)类型。其中转字节流采用了 bytes() 方法,第一个参数需要是 str (字符串)类型,需要用 urllib.parse.urlencode() 方法来将参数字典转化为字符串。第二个参数指定编码格式,在这里指定为 utf8 。提交的网址是 httpbin.org ,它可以提供 HTTP 请求测试。 http://httpbin.org/post 这个地址可以用来测试 POST 请求,它可以输出请求和响应信息,其中就包含我们传递的 data 参数。

运行结果如下:


{
"args": {},
"data": "",
"files": {},
"form": {
"word": "hello"
},
"headers": {
"Accept-Encoding": "identity",
"Content-Length": "10",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "Python-urllib/3.5"
},
"json": null,
"origin": "123.124.23.253",
"url": "http://httpbin.org/post"
}

timeout参数

timeout 参数可以设置超时时间,单位为秒,意思就是如果请求超出了设置的这个时间还没有得到响应,就会抛出异常,如果不指定,就会使用全局默认时间。它支持 HTTP 、 HTTPS 、 FTP 请求。

urllib.request.Request

由上我们知道利用 urlopen() 方法可以实现最基本的请求发起,但这几个简单的参数并不足以构建一个完整的请求,如果请求中需要加入 headers 等信息,我们就可以利用更强大的 Request 类来构建一个请求。

from urllib import request
import urllib

request1 = urllib.request.Request("https://www.baidu.com")
response = urllib.request.urlopen(request1)
print(response.read().decode("utf-8"))

可以发现,我们依然是用 urlopen() 方法来发送这个请求,只不过这次 urlopen() 方法的参数不再是一个URL,而是一个 Request ,通过构造这个这个数据结构,一方面我们可以将请求独立成一个对象,另一方面可配置参数更加丰富和灵活

Request构造方法:

class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

第一个参数是请求链接,这个是必传参数,其他的都是可选参数。

data 参数如果要传必须传 bytes (字节流)类型的,如果是一个字典,可以先用 urllib.parse.urlencode() 编码。

headers 参数是一个字典,你可以在构造 Request 时通过 headers 参数传递,也可以通过调用 Request 对象的 add_header() 方法来添加请求头。请求头最常用的用法就是通过修改 User-Agent 来伪装浏览器,默认的 User-Agent 是 Python-urllib ,你可以通过修改它来伪装浏览器,比如要伪装火狐浏览器,你可以把它设置为 Mozilla/5.0 (X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11

origin_req_host 指的是请求方的 host 名称或者 IP 地址。

unverifiable 指的是这个请求是否是无法验证的,默认是 False 。意思就是说用户没有足够权限来选择接收这个请求的结果。例如我们请求一个HTML文档中的图片,但是我们没有自动抓取图像的权限,这时 unverifiable 的值就是 True 。

method 是一个字符串,它用来指示请求使用的方法,比如 GET , POST , PUT 等等。

from urllib import request
import urllib.parse

url = "http://httpbin.org/post"
headers = {
#伪装一个火狐浏览器
   "User-Agent":'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
   "host":'httpbin.org'
}

dict = {
   "name":"Germey"
}

data = bytes(urllib.parse.urlencode(dict),encoding="utf-8")
req = request.Request(url=url,data=data,headers=headers,method="POST")
response = urllib.request.urlopen(req)
print(response.read().decode("utf-8"))

通过四个参数构造了一个 Request , url 即请求链接,在 headers 中指定了 User-Agent 和 Host ,传递的参数 data 用了 urlencode() 和 bytes() 方法来转成字节流,另外指定了请求方式为 POST 。

运行结果如下:


{
 "args": {},
 "data": "",
 "files": {},
 "form": {
   "name": "Germey"
},
 "headers": {
   "Accept-Encoding": "identity",
   "Connection": "close",
   "Content-Length": "11",
   "Content-Type": "application/x-www-form-urlencoded",
   "Host": "httpbin.org",
   "User-Agent": "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"
},
 "json": null,
 "origin": "1.85.221.5",
 "url": "http://httpbin.org/post"
}

另外 headers 也可以用 add_header() 方法来添加。

req = request.Request(url=url, data=data, method='POST')req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5;Windows NT)')

如此一来,我们就可以更加方便地构造一个 Request ,实现请求的发送。

logging

1 模块简介

logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比print() ,具备如下优点:

  1. 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;

  2. print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则可以由开发者决定将信息输出到什么地方,以及怎么输出;

2 模块使用

2.1 基本使用

控制台输出日志

import logging
logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

logger.info("Start print log")
logger.debug("Do something")
logger.warning("Something maybe fail.")
logger.info("Finish")

输出结果为:

2019-11-26 14:34:38,024 - __main__ - INFO - Start print log
2019-11-26 14:34:38,025 - __main__ - WARNING - Something maybe fail.
2019-11-26 14:34:38,025 - __main__ - INFO - Finish

logging.basicConfig函数各参数:

参数名称 参数描述
filename 指定日志文件名
filemode 指定打开方式,r[+],w[+],a[+]
format 日志输出的格式(见下表)
datefmt 日志附带时间日期的格式
level 设置日志级别
stream 定义输出流,不能和filename参数一起使用
handles 定义处理器,不能和filename,stream参数一起使用

format输出格式:

变量 格式 变量描述
asctime %(asctime)s 将日志的时间构造成可读的形式,默认情况下是精确到毫秒,如 2018-10-13 23:24:57,832,可以额外指定 datefmt 参数来指定该变量的格式
name %(name) 日志对象的名称
filename %(filename)s 不包含路径的文件名
pathname %(pathname)s 包含路径的文件名
funcName %(funcName)s 日志记录所在的函数名
levelname %(levelname)s 日志的级别名称
message %(message)s 具体的日志信息
lineno %(lineno)d 日志记录所在的行号
process %(process)d 当前进程ID
processName %(processName)s 当前进程名称
thread %(thread)d 当前线程ID
threadName %threadName)s 当前线程名称

将日志写到文件

将日志写到文件

设置logging,创建一个FileHandler,并对输出消息的格式进行设置

猜你喜欢

转载自www.cnblogs.com/erlchixiha/p/11937793.html
今日推荐