Python Cookbook学习记录

3.数值、日期和时间
3.9处理大型数组的计算

import numpy as np

ax = np.array([1, 2, 3, 4])
ay = np.array([5, 6, 7, 8])
#每个元素乘以2
print(ax*2)
#每个元素加10
print(ay+10)
#对应位置上的元素相加
print(ax+ay)
#对应位置上的元素相乘
print(ax*ay)

def f(x):
    return 3*x**2 - 2*x + 7
#处理array对象里的每个元素
print(f(ax))


print(np.sqrt(ax))
print(np.cos(ax))
#产生类型为float大小为零的10000*10000的array对象
grid = np.zeros(shape=(10000, 10000), dtype=float)
print(grid)

print(grid+10)

print(grid[1])
#多维array对象
a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
#每一行的第一列数
print(a[:,1])
#第二行到第三行,第二列到第三列数
print(a[1:3, 1:3])
#第二行到第三行,第二列到第三列数+10
print(a[1:3, 1:3]+10)

print(a+[100, 101, 102, 103])
print(a)
#条件选择,a中小于10的元素全部替换成10
np.where(a < 10, a, 10)

3.10略
3.11随机选择

'''
random采用马特赛旋转算法(梅森旋转算法)来计算随机数
'''
import random

#从序列中随机选择一个元素
values = [1, 2, 3, 4, 5]
print(random.choice(values))

#从序列中随机选择两个元素,返回一个列表
print(random.sample(values, 2))

#打乱顺序
random.shuffle(values)
print(values)

#从0-10随机选择一个整数
print(random.randint(0, 10))

#随机从0-1返回一个浮点数
print(random.random())

#返回一个随机的200位的数
print(random.getrandbits(200))

#默认是时间种子,自定义种子应该是定义变化种子参数的函数,参数一成不变结果也不会改变
random.seed()
random.seed(12345)
random.seed(b'bytedata')

3.12时间换算

from datetime import timedelta
from datetime import datetime
#时间差对象
a = timedelta(days=2, hours=6)
b = timedelta(hours=4.5)
c = a+b
print(c.days, c.seconds, sep="  ")
print(c.seconds/3600)
print(c.total_seconds()/3600)


m = datetime(2012, 9, 23)
print(a+timedelta(days=10))

n = datetime(2012, 12, 21)
d = n - m
print(d.days)
now = datetime.today()
print(now)
print(now+timedelta(minutes=10))


j = datetime(2012, 3, 1)
k = datetime(2012, 2, 28)
print(a-b)

print((a-b).days)

l = datetime(2013, 3, 1)
i = datetime(2013, 2, 28)
print((l-i).days)

#可以产生月份差和星期差
from dateutil.relativedelta import relativedelta

s = datetime(2012, 9, 23)
#print(s+timedelta(months=1))Error
print(a+relativedelta(months=+1))
print(a+relativedelta(months=+4))

e = datetime(2012, 12, 21)
g = e-s
print(g)
t = relativedelta(e, s)
print(t)

print(t.months, t.days, sep="   ")

3.13计算上周五的日期

from datetime import datetime, timedelta

weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

def get_previous_byday(dayname, start_date=None):
    if start_date is None:
        start_date = datetime.today()
    day_num = start_date.weekday()
    print(day_num)
    day_num_target = weekdays.index(dayname)
    days_ago = (7 + day_num - day_num_target) % 7
    if days_ago == 0:
        days_ago = 7
    target_date = start_date - timedelta(days=days_ago)
    print(target_date)


print(get_previous_byday('Thursday', datetime(2019, 9, 15)))

from dateutil.relativedelta import relativedelta
from dateutil.rrule import *

d = datetime.now()
print(d)
#next Friday
print(d+relativedelta(weekday=FR))
#last Friday
print(d+relativedelta(weekday=FR(-1)))

3.14找出当月的日期范围

from datetime import datetime, date, timedelta
import calendar

def get_month_range(start_date=None):
    if start_date is None:
        #替换day属性为1号
        start_date = datetime.today().replace(day=1)
    #返回第一天是周几,周几对应的是0-6,和月天数
    _, days_in_month = calendar.monthrange(start_date.year, start_date.month)
    print(_)
    print(days_in_month)
    end_date = start_date + timedelta(days=days_in_month)
    return (start_date, end_date)

a_day = timedelta(days=1)
first_day, last_day = get_month_range()
while first_day < last_day:
    print(first_day)
    first_day += a_day

3.15将字符串转化为日期

from datetime import datetime

text = '2019-09-09'
#%Y表示以四位数字表示的年份,%m表示一两位数字表示的月份
y = datetime.strptime(text, "%Y-%m-%d")
z = datetime.now()

diff = z - y
print(diff)
#将日期对象转化为字符串,%A表示英文月份,%B表示英文周几,%d、%Y表示天数和年份
nice_z = datetime.strftime(z, '%A %B %d, %Y')
print(nice_z)

3.16处理涉及到时区的日期时间

from datetime import datetime
from pytz import timezone
import pytz

d = datetime(2012, 12, 21, 9, 30, 0)
print(d)

central = timezone('US/Central')
loc_d = central.localize(d)
print(loc_d)

#日期经过本地化处理就能转换为其他的时区
bang_d = loc_d.astimezone(timezone('Asia/Kolkata'))
print(bang_d)

#时区名称, 使用ISO 3166国家代码作为键查询
print(pytz.country_timezones['IN'])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值