【Python进阶】数字、日期和时间

一、对数值进行取整

  将浮点数取整到固定的小数位:roung(value, ndigits),ndigits可以是负数,取整到十位、百位、千位等。

  >>> round(1.456, 2)      # 1.46

  >>> round(16743, -3)      # 17000

  >>> format(1.2345, ‘0.3f‘)  # 1.235

二、精确的小数计算

  浮点数无法精确表达出所有的十进制小数位。

  0.4的二进制表示是无限循环,所以如果要精确表示0.4,计算机需要无限个二进制位才能做到。

  然而计算机的内存、CPU寄存器等等硬件单元都是有限的,只能表示有限的二进制位。

  >>> from decimal import Decimal

  >>> Decimal(‘4.2‘) + Decimal(‘2.1‘)  # Decimal(‘6.3‘)

三、数值做格式化输出

  使用内建的format()函数即可。

  >>> ‘The value is {:0,.2f}‘.format(123456.789)  # 123,456.79

  

四、二进制、八进制和十六进制数

  将一个整数转换为二进制、八进制和十六进制的文本字符串形式,分别使用内建的bin()、oct()、hex()函数即可。

  >>> x = 1234

  >>> bin(x)   # ‘0b10011010010‘

  >>> oct(x)   # ‘0o2322‘

  >>> hex(x)  # ‘0x4d2‘

  不希望出现0b、0o、0x这样的前缀,可以使用format()函数

  >>> format(x, ‘b‘), format(x, ‘o‘), format(x, ‘x‘)

  转换回10进制:

  >>> int(‘4d2‘, 16)  # 1234

  确保八进制数前添加0o前缀:

  >>> os.chmod(‘script.py‘. 0o755)

五、字节串中打包和解包大整数

  >>> int.from_bytes(data, ‘little‘)

  >>> x.to_bytes(16, ‘big‘)

六、复数运算

  复数通过complex(real, imag)函数来指定,或者通过浮点数再加上后缀j来指定。

  >>> a = complex(2, 4)  # (2+4j)

  >>> b = 3 - 5j

  >>> a.real, a.imag, a.conjugate()  # 实部、虚部以及共轭值

  求正弦、余弦或平方根使用cmath模块

  >>> cmath.sin(a), cmath.cos(a), smath.exp(a)

七、处理无穷大和 NaN(Not a number)

  检测是否出现该值用math.isinf()和math.isnan()函数

  >>> float(‘inf‘), float(‘-inf‘), float(‘nan‘)

  (1)无穷大值在数学计算中会进行传播

  (2)某些特定的操作会导致未定义的行为并产生NaN的结果

  (3)NaN会通过所有的操作进行传播

八、分数的计算

  fractions模块处理设计焚书的数学计算问题

  >>> form fractions import Fraction

  >>> a = Fraction(5, 4)  # 5/4

  >>> a.numerator, a.denominator  # 5, 4

  >>> float(a)

  >>> x = 3.75

  >>> y = Fraction(*x.as_integer_ratio())  # Fraction(15, 4)

十一、随机选择

  (1)从序列中挑选元素:

  >>> random.choice([1, 2, 3, 4, 5])

  (2)序列中随机取N个元素:

  >>> random.sample(values, N)

  (3)打乱序列顺序:

  >>> random.shuffle(values)

  (4)产生随机整数

  >>> random.randint(0,10)  # 0~10范围

  (5)产生0~1均匀分布的浮点数值:

  >>> random.random()

  (6)由N个随机比特位所表示的整数:

  >>> random.getrandbits(N)

  (7)random模块采用马特赛特旋转算法,这是一个确定性算法,但是可以通过 random.seed() 函数修改初始的种子值。

十二、时间换算

  利用 datetime 模块来完成不同时间单位间的换算。

  >>> from datetime import datedelta

  >>> a = timedelta(days=2, hours=6, minutes=6)

  >>> from datetime import datetime

  >>> b = datetime(2019, 9, 11)

  >>> c = b - a

  >>> datetime.today()

  处理时区、模糊时间范围、计算节日的日期使用 dateutil 模块,同时解决datetime不能计算月份的问题。

  >>> from dateutil.relativedelta import relativedelta

  >>> a + relativedelta(months=+1)

  >>> d = relativedelta(b, a)  # 计算相差的天数

  >>> d.months, d.days

十三、计算上周 X的日期

  使用datetime模块完成计算例子:

def get_previous_byday(dayname, start_date=None):

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

    if start_date is None:
        start_date = datetime.today()

    day_num = start_date.weekday()
    day_num_target = weekdays.index(dayname)
    day_ago = (7 + day_num - day_num_target) % 7
    if day_ago == 0:
        day_ago = 7
    target_day = start_date - timedelta(days=day_ago)

    return target_day

  使用dateutil模块计算

  >>> from datetime import datetime

  >>> from dateutil.relativedelta import relativedelta

  >>> from dateutil.rrule import *

  >>> d = datetime.today()

  >>> d+relativedelta(weekday=FR)    # Next Friday

  >>> d+relativedelta(weekday=FR(-1))   # Last Friday

十四、找出当月的日期范围

  循环迭代当月中的每个日期。

from datetime import datetime,timedelta
import calendar

def get_month_range(start_day=None):
    if start_day is None:
        start_day = datetime.today().replace(day=1)
    _, days_in_month = calendar.monthrange(start_day.year, start_day.month)
    end_date = start_day + timedelta(days=days_in_month)
    return (start_day,end_date)

a_day = timedelta(days=1)
first_date, last_date = get_month_range()
while first_date < last_date:
    print(first_date)
    first_date += a_day

  (1)计算出月份中第一天的日期:datetime对象的replace(day=1)方法进行替换。

  (2)calendat.monthrange() 函数,找出待求解的月份中有多少天,返回第一个工作日的星期(返回值0~6)和当月的天数(28~31)

  生成器实现例子:

from datetime import  datetime,timedelta

def get_range(start_day,end_day,step):
    while start_day < end_day:
        yield start_day
        start_day += step

for k in get_range(datetime.today(),datetime(2019,10,1),timedelta(days=1)):
    print(k)

十五、将字符串转换为日期

  datetime.strptime()方法支持许多格式化代码,如%Y代表4为数字表示的年份,%m代表2位数字月份,%d代表日期。

  >>> from datetime import datetime

  >>> text = ‘2019-9-11‘

  >>> datetime.strptime(text, ‘%Y-%m-%d’)

  但是datetime.strptime()性能表现糟糕体现在处理各种各样的系统区域设置。如果事先知道日期格式,可以自己编写代码:

def parse_ymd(str_date):
    year_s, mon_s, day_s = str_date.split(‘-‘)
    return datetime(int(year_s), int(mon_s), int(day_s))

十六、涉及时区的日期处理

  时区名称:pyzt.country_timezones,这是一个字典,使用ISO3166国家代码作为key来查询所属时区。

  >>> pyzt.country_timezones[‘CN‘]  # [‘Asia/Shanghai‘, ‘Asia/Urumqi‘]

  时区计算:先将本地时间-》UTC时间,UTC时间进行运算-》本地时间

  >>> from pytz import timezone

  >>> central = timezone(‘Asia/Shanghai‘)

  >>> loc_d = central.localize(datetime.today())

  >>> utc_d = loc_d.astimezone(pytz.utc)

  >>> utc_d + timedelta(minutes=30)

  >>> later_utc = utc_d + timedelta(minutes=30)

  >>> later_utc.astimezone(central)

原文地址:https://www.cnblogs.com/5poi/p/11506465.html

时间: 2024-10-09 03:24:07

【Python进阶】数字、日期和时间的相关文章

数字日期和时间

数字的四舍五入 问题: 你想对浮点数执行指定精度的舍入运算. 解决方法: 对于简单的舍入运算,使用内置的round(value, ndigits) 函数即可.比如: 1 #保留小数点后1位数,因为比1.25小,所以四舍五入,取小的 2 r1 = round(1.23, 1) 3 print(r1) 4 5 #保留小数点后1位数,因为比1.25大,所以四舍五入,所以取大的 6 r2 = round(1.27, 1) 7 print(r2) 8 9 #保留小数点后1位数,因为比-1.25小,所以四舍

python 3 之日期与时间处理模块(date和datetime)

前言相关术语的解释时间的表现形式time模块datetime模块时间格式码总结前言 在开发工作中,我们经常需要用到日期与时间,如: 作为日志信息的内容输出计算某个功能的执行时间用日期命名一个日志文件的名称记录或展示某文章的发布或修改时间其他Python中提供了多个用于对日期和时间进行操作的内置模块:time模块.datetime模块和calendar模块.其中time模块是通过调用C库实现的,所以有些方法在某些平台上可能无法调用,但是其提供的大部分接口与C标准库time.h基本一致.time模块

python时间戳、日期、时间转换

1.str转时间戳 # 字符类型的时间 tss1 = '2013-10-10 23:40:00' # 转为时间数组 timeArray = time.strptime(tss1, "%Y-%m-%d %H:%M:%S") print timeArray # timeArray可以调用tm_year等 print timeArray.tm_year # 2013 # 转为时间戳 timeStamp = int(time.mktime(timeArray)) print timeStamp

python操作日期和时间的方法

经常获得了一个用户提交的当前日期,我们需要以这个日期为依据返回它的前一天.后一天的日期或者转换操作等.用Python可以非常简单的解决这些关于日期计算的问题. 不管何时何地,只要我们编程时遇到了跟时间有关的问题,都要想到 datetime 和 time 标准库模块,今天我们就用它内部的方法,详解python操作日期和时间的方法. 1.将字符串的时间转换为时间戳 方法: a = "2013-10-10 23:40:00" #将其转换为时间数组 import time timeArray 

Python 日期和时间(转)

Python 日期和时间 Python程序能用很多方式处理日期和时间.转换日期格式是一个常见的例行琐事.Python有一个 time 和 calendar 模组可以帮忙. 什么是Tick? 时间间隔是以秒为单位的浮点小数. 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示. Python附带的受欢迎的time模块下有很多函数可以转换常见日期格式.如函数time.time()用ticks计时单位返回从12:00am, January 1, 1970(epoch) 开始的记录的当

Python之日期与时间处理模块(date和datetime)

本节内容 前言 相关术语的解释 时间的表现形式 time模块 datetime模块 时间格式码 总结 前言 在开发工作中,我们经常需要用到日期与时间,如: 作为日志信息的内容输出 计算某个功能的执行时间 用日期命名一个日志文件的名称 记录或展示某文章的发布或修改时间 其他 Python中提供了多个用于对日期和时间进行操作的内置模块:time模块.datetime模块和calendar模块.其中time模块是通过调用C库实现的,所以有些方法在某些平台上可能无法调用,但是其提供的大部分接口与C标准库

Python日期和时间

日期和时间主要有两个库,datetime和time. datetime: 日期:datetime.date.today() 日期和时间:datetime.datetime.now() 1000天之后:datetime.datetimedelta(days=1000) 打印格式的问题:isoformat(),strftime() 字符串转换:strptime() time: datetime.time(12,11,30) time.time() 实际时间 time.clock() CPU时间 ti

Python学习笔记十:日期和时间

日期和时间处理是经常会遇到的事情. 什么是Tick? 时间间隔是以秒为单位的浮点小数. 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示. Python附带的受欢迎的time模块下有很多函数可以转换常见日期格式.如函数time.time()用ticks计时单位返回从12:00am, January 1, 1970(epoch) 开始的记录的当前操作系统时间, 如下实例: 1 #!/usr/bin/python 2 import time; # This is required

取得日期、时间的各个位置的数字

直接看代码  最直接 //日期处理 NSDate *now = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comonents = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit fr

机器学习特征表达——日期与时间特征做离散处理(数字到分类的映射),稀疏类分组(相似特征归档),创建虚拟变量(提取新特征) 本质就是要么多变少,或少变多

特征表达 接下来要谈到的特征工程类型虽然简单却影响巨大.我们将其称为特征表达. 你的数据并不一定总是理想格式.你需要考虑是否有必要通过另一种形式进行特征表达以获取有用信息. 日期与时间特征: 我们假设你拥有purchase_datetime特征.从中提取purchase_day_of_week与purchase_hour_of_day两项特征可能会更有用.你还可以进行观察聚类以创建诸如purchases_over_last_30_days这类特征. 数字到分类的映射: 假设你拥有years_in