2017年1月

首页2017年1月
20
Jan
0

爬虫常用库requests和libxml2 for python

  1. libxml2 for python
    download:https://pypi.python.org/pypi/libxml2-python/

xpath etree
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。

2.requests
pip install requests

import requests
url='http://www.baidu.com'
x=requests.get(url)
print x.content

19
Jan
0

SMTP服务测试

coding:utf-8

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import parseaddr,formataddr
from email import encoders
from email.mime.multipart import MIMEMultipart
from email.MIMEBase import MIMEBase

msg = MIMEMultipart()
msg['From'] = "2582612651@qq.com"
msg['To'] = "510264942@qq.com"
msg['subject'] = 'python test'

msg.attach(MIMEText('send with file...','plain','utf-8'))
with open('d:/xuegod/ship/images/1.txt','r') as f:

mime = MIMEBase('txt','txt',filename='txt')
mime.add_header('Content-Dispositon','attachment',filename = '1.txt')
mime.add_header('Content-ID','<0>')
mime.add_header('X-Attachment-Id','0')
#print dir(mime)
mime.set_payload(f.read())
encoders.encode_base64(mime)
msg.attach(mime)

server = smtplib.SMTP_SSL('smtp.qq.com',465)#设置smtp服务器,当前使用的是QQ的SMTP服务器
server.set_debuglevel(1)

server.login("xxxx@qq.com","vyqdubvxvzmveaif") #第二个参数是腾讯提供的验证
server.sendmail("dxxx@qq.com",[

                            "xxxx@qq.com"
                            ],msg.as_string())

server.quit()

19
Jan
0

socket server几个相关类说明

coding:utf-8

写了一个功能

class socketHandler(SocketServer.BaseRequestHandler):

#Handler类:实现socket功能的一个句柄类
    #StreamRequestHandler  TCP协议handler类的父类
    #DGRAMRequestHandler   UDP协议handler类的父类
    #BaseRequestHandler    所有Hnandler类的父类
#这三个类里边全部包含setup,handler,finish这三个方法,这三个方法不需要调用
    #setup:类似于构造函数,handler类实例化的时候自动执行,类似于__init__函数 
    #handler:实现socket的核心,在这个方法里面通过self.request具体实现socket,
             #self.request == sock = socket.scoket() self.request是父类自动创建出来的
    #finish:在服务器结束的时候自动执行

写了一个服务

class socketserver(SocketServer.TCPServer):

pass

s = socketserver(('',8000),socketHandler)#实例化之后自动执行了setup方法

class MyServer(SocketServer.TCPServer,SocketServer.ThreadingMixIn):

pass

实例一个自己的服务器 第一个类TCP服务器的基类 第二个是混合多线程的类

#TCP服务器的基类+混合多线程的类 = 拥有多线程能力的TCP服务器

文件分发的功能

shutdown

04
Jan
0

PYTHON时间日期计算

下面是格式化日期和时间时可用的替换符号 %a 输出当前是星期几的英文简写

import datetime
now=datetime.datetime.now()
now.strftime('%a')
'Sun'

%A 输出完整的星期几名称英文

import datetime
now=datetime.datetime.now()
now.strftime('%A')

'Sunday'
%b 输出月份的英文简写

import datetime
now=datetime.datetime.now()
now.strftime('%b')

'Sep'
%B 输出月份的英文完整名称

import datetime
now=datetime.datetime.now()
now.strftime('%B')

'September'
%c 以本地时间显示日期和时间

import datetime
now=datetime.datetime.now()
now.strftime('%c')

'09/15/13 21:43:29'
%d 显示1-31之间的数,每月的第几天,也就是年月日中的日

import datetime
now=datetime.datetime.now()
now.strftime('%d')

'15'
%H 以24小时制显示小时,比如,02,14

import datetime
now=datetime.datetime.now()
now.strftime('%H')

'21'
%I 以12小时制的方式显示当前小时,例如当前jb51.net服务器的时间为晚上21点,使用%I显示09

import datetime
now=datetime.datetime.now()
now.strftime('%I')

'09'
%j 显示当前日期为一年中的第几天,如当前jb51.net服务器时间为2013年9月15日,则显示为258,也就是一年中的第258天

import datetime
now=datetime.datetime.now()
now.strftime('%j')

'258'
%m 显示1-12之间的月份

import datetime
now=datetime.datetime.now()
now.strftime('%m')

'09'
%M 显示00-59之间的分钟数

import datetime
now=datetime.datetime.now()
now.strftime('%M')

'43'
%p 以 A.M./P.M.方式显示是上午还是下午

import datetime
now=datetime.datetime.now()
now.strftime('%p')

'PM'
%S 显示0-59之间的秒数

import datetime
now=datetime.datetime.now()
now.strftime('%S')

'29'
%U 显示一年中的第几周,星期天为一周的第一天,例如当前www.jb51.net服务器时间为2013年9月15日,星期天,显示为第37周

import datetime
now=datetime.datetime.now()
now.strftime('%U')

'37'
%w 显示一周中的第几天,其中星期天为0,星期一为1,例如:jb51.net当前日期为2013年9月17日星期二,则显示结果为2

import datetime
now=datetime.datetime.now()
now.strftime('%w')

'2'
%W 显示一年中的第几周,和U%把不同的是星期一为一周的第一天,例如当前www.jb51.net服务器时间为2013年9月17日,星期二,显示为第37周,范围在0-51之间

import datetime
now=datetime.datetime.now()
now.strftime('%W')

'37'
%x 显示当地的日期,例如jb51.net本地时间为:北京时间2013年9月17日

import datetime
now=datetime.datetime.now()
now.strftime('%x')

'09/17/13'
%X 显示当地的时间,例如jb51.net本地时间为:北京时间2013年9月17日 07:55:04

import datetime
now=datetime.datetime.now()
now.strftime('%X')

'07:55:04'
%y 显示(00 - 99) 之间的年份,例如:jb51.net服务器时间为:2013年9月17日,则显示结果为13

import datetime
now=datetime.datetime.now()
now.strftime('%y')

'13'
%Y 显示完整年份,例如:jb51.net服务器时间为:2013年9月17日,则显示结果为2013

import datetime
now=datetime.datetime.now()
now.strftime('%Y')

'2013'
%z, %Z 输出时区,如果不能显示,则显示为空字符 %% 用于显示%符号

now.strftime('%%')

'%'
在举一个完整的例子:
显示当前日期时间:格式为:年-月-日 时:分:秒

datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S');

'2013-09-17 08:06:17'

所有日期、时间的api都在datetime模块内。

  1. 日期输出格式化 datetime => string

import datetime

now = datetime.datetime.now()

now.strftime('%Y-%m-%d %H:%M:%S')

输出

'2015-04-07 19:11:21'

strftime是datetime类的实例方法。

  1. 日期输出格式化 string => datetime

import datetime

t_str = '2015-04-07 19:11:21'

d = datetime.datetime.strptime(t_str, '%Y-%m-%d %H:%M:%S')

strptime是datetime类的静态方法。

  1. 日期比较操作

在datetime模块中有timedelta类,这个类的对象用于表示一个时间间隔,比如两个日期或者时间的差别。

构造方法:

import datetime

datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

所有的参数都有默认值0,这些参数可以是int或float,正的或负的。

可以通过 timedelta.days、tiemdelta.seconds 等获取相应的时间值。

timedelta 类的实例,支持加、减、乘、除等操作,所得的结果也是 timedelta 类的实例。比如:

import datetime

year = datetime.timedelta(days=365)

ten_years = year *10

nine_years = ten_years - year

同时,date、time和datetime类也支持与timedelta的加、减运算。

datetime1 = datetime2 + timedelta

timedelta = datetime1 - datetime2

这样,可以很方便的实现一些功能。

  1. 两个日期相差多少天。

import datetime

d1 = datetime.datetime.strptime('2015-03-05 17:41:20', '%Y-%m-%d %H:%M:%S')

d2 = datetime.datetime.strptime('2015-03-02 17:41:20', '%Y-%m-%d %H:%M:%S')

delta = d1 - d2

print delta.days

输出:3

  1. 今天的n天后的日期。

import datetime

now = datetime.datetime.now()

delta = datetime.timedelta(days=3)

n_days = now + delta

print n_days.strftime('%Y-%m-%d %H:%M:%S')

输出:

2015-04-10 19:16:34

coding=utf-8

import datetime

now=datetime.datetime.now()

print now

将日期转化为字符串

datetime => string

import datetime

now=datetime.datetime.now()

print now.strftime('%Y-%m-%d %H:%M:%S')

将字符串转换为日期 string => datetime

import datetime

t_str = '2015-03-05 16:26:23'

d=datetime.datetime.strptime(t_str,'%Y-%m-%d %H:%M:%S')

print d

在datetime模块中有timedelta类,这个类的对象用于表示一个时间间隔,比如两个日#期或者时间的差别。

计算两个日期的间隔

import datetime

d1 = datetime.datetime.strptime('2012-03-05 17:41:20', '%Y-%m-%d %H:%M:%S')

d2 = datetime.datetime.strptime('2012-03-02 17:41:20', '%Y-%m-%d %H:%M:%S')

delta = d1 - d2

print delta.days print delta

今天的n天后的日期

import datetime

now=datetime.datetime.now()

delta=datetime.timedelta(days=3)

n_days=now+delta

print n_days.strftime('%Y-%m-%d %H:%M:%S')

datetime的好处是可以实现方便的时间运算,比如 endTime - starTime,这在时间duration计算时非常方便.

====================================================

  1. 时间字符串 --> 时间戳

    1) time 模块
    

timestring = '2016-12-21 10:22:56'
print time.mktime(time.strptime(timestring, '%Y-%m-%d %H:%M:%S')) # 1482286976.0

time.mktime() 与 time.localtime() 互为还原函数。

time.mktime(timetuple) :将时间元组转换成时间戳

time.localtime([timestamp]):将时间戳转会为时间元组

2) datetime 模块

在这里没有找到,似乎只有 time 模块能获取时间戳

  1. 时间戳 --> 时间字符串

    1) time 模块
    

timestamp = time.time()
timestruct = time.localtime(timestamp)
print time.strftime('%Y-%m-%d %H:%M:%S', timestruct) # 2016-12-22 10:49:57

2) datetime 模块

复制代码
import datetime
timestamp = 1482374997.55
datetime_struct = datetime.datetime.fromtimestamp(timestamp)
print datetime_struct.strftime('%Y-%m-%d %H:%M:%S') # 2016-12-22 10:49:57

datetime_struct = datetime.datetime.utcfromtimestamp(timestamp)
print datetime_struct.strftime('%Y-%m-%d %H:%M:%S') # 2016-12-22 02:49:57
复制代码

fromtimestamp(timestamp[, tz]):将时间戳转为当地的时间元组
utcfromtimestamp(timestamp):将时间戳转为UTC的时间元组。以北京为例:utc时间比北京当地时间少8个小时。
  1. 时间差计算

    1) 几天/周前
    

复制代码
import datetime

now = datetime.datetime.now()
three_days_ago = now + datetime.timedelta(days=-3)
three_weeks_ago = now + datetime.timedelta(weeks=-3)

print now # datetime.datetime(2016, 12, 22, 11, 24, 49, 987171)
print three_days_ago # datetime.datetime(2016, 12, 19, 11, 24, 49, 987171)
print three_weeks_ago # datetime.datetime(2016, 12, 1, 11, 24, 49, 987171)
复制代码

2) 几天/周后

复制代码
import datetime

now = datetime.datetime.now()
three_days_later = now + datetime.timedelta(days=3)
three_weeks_later = now + datetime.timedelta(weeks=3)

print now # datetime.datetime(2016, 12, 22, 11, 24, 49, 987171)
print three_days_later # datetime.datetime(2016, 12, 25, 11, 24, 49, 987171)
print three_weeks_later # datetime.datetime(2017, 1, 12, 11, 24, 49, 987171)
复制代码
注意:没有months和years

3)时间差

复制代码
import time
import datetime

start = datetime.datetime.now()
time.sleep(30)
end = datetime.datetime.now()

print (end-start).days # 0 天数
print (end-start).total_seconds() # 30.029522 精确秒数
print (end-start).seconds # 30 秒数
print (end-start).microseconds # 29522 毫秒数
复制代码
注意:没有分钟

  1. 任意时间字符串转换时间对象
    复制代码

import time
from dateutil import parser

time_string = time.ctime() # 'Thu Dec 22 10:35:25 2016',这里可以是任意的时间格式
datetime_struct = parser.parse(time_string)
print type(datetime_struct) # <type 'datetime.datetime'>
print datetime_struct.strftime('%Y-%m-%d %H:%M:%S') # 2016-12-22 13:58:59
复制代码

03
Jan
0

安装 python psutil 包

yum install python-pip

下载 psutil
https://pypi.python.org/pypi?:action=display&name=psutil#downloads

https://pypi.python.org/packages/source/p/psutil/psutil-3.2.2.tar.gz

保存到 /root
wget https://pypi.python.org/packages/source/p/psutil/psutil-3.2.2.tar.gz
tar zxvf psutil-3.2.2.tar.gz
cd psutil-3.2.2/
python setup.py install (或使用 pip install psutil 安装)

如果报错检查 gcc 是否安装,python-devel 是否安装。
yum install python-devel